2012-03-18 76 views
8

我正在写一个宏,当我按下某个键时,它将在屏幕上点击某些点。time.sleep需要整数?

第一次按下按键,一切运行良好。
然而,任何其他按键导致错误:

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

下面是代码:

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() 

似乎第一次DeleteRun功能由pyHook运行,time.sleep()接受浮动。
在以下任何函数调用中,似乎只接受整数。

这是什么造成的?
我不能等待5秒的鼠标安排!它应该节省时间!

规格:

  • 蟒蛇2.7.2
  • 的Windows 7(32)
+1

你可以'输入time_safe'并使用'time_safe'代替'time'吗?也许pyHook正在用'time'类做一些事情。 – Blender 2012-03-18 21:47:47

+0

没有成功,我很害怕。但我注意到它交替工作和失败。 – 2012-03-18 21:50:53

+0

也许试试'特别是从时间导入睡眠'? – 2012-03-18 21:56:40

回答

5

好吧,这个怎么样?真正的回报加入DeleteRun:

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

我也许应该承认,这是小比谷歌福多:阅读答案this question

+1

好神,你做到了! – 2012-03-18 22:20:56

+0

有另一个问题,也许有关。 http://stackoverflow.com/questions/9763053/pyhook-giving-up – 2012-03-18 22:55:10

-1

我不知道什么是错的与Windows这一次,但你可以尝试编造一个使用select()而不使用文件描述符的高精度睡眠。

+0

你能给我一个实现的例子吗? – 2012-03-18 21:54:20