2012-03-18 78 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