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)
Was it helpful?

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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top