Question

I'm writing a macro that will click certain spots on the screen when I press a key.

The first time I press a key, everything runs fine.
However, any other key press results in the error:

    time.sleep(0.1)
TypeError: an integer is required

Here is the code:

import win32api
import win32con
import time
import pythoncom
import pyHook
import os

def Click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def DeleteRun(event):
    Click(1250, 741)
    time.sleep(0.1)
    Click(649,261)
    time.sleep(0.1)
    Click(651, 348)
    time.sleep(0.1)
    Click(800, 442)
    time.sleep(0.1)
    Click(865, 612)


Click(20,20)
KeyGrabber = pyHook.HookManager()
KeyGrabber.KeyDown = DeleteRun
KeyGrabber.HookKeyboard()
pythoncom.PumpMessages()

It seems the first time the DeleteRun function is run by pyHook, time.sleep() accepts floats.
On any following function calls, it seems it only accepts integers.

What is causing this?
I can't wait 5 seconds for the mouse arrangement! It's supposed to save time!

Specs:

  • python 2.7.2
  • Windows 7 (32)
Était-ce utile?

La solution

Okay, how about this? Add a return True to DeleteRun:

def DeleteRun(event):
    Click(1250, 741)
    time.sleep(0.1)
    [...]
    return True

I should probably confess that this was little more than google-fu: read the answer to this question.

Autres conseils

I'm not sure what's wrong with Windows this time, but you could try faking a high-precision sleep using select() with no file descriptors.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top