import sys
import win32api, win32con
import pyHook
import pythoncom
def CursorLeft():
win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, -1, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)
def Quit():
print "Quitting"
sys.exit()
# create a keyboard hook
def OnKeyboardEvent(event):
print 'MessageName:', event.MessageName
print 'Key:', event.Key
if event.Key in ['Numpad2']:
CursorLeft()
elif event.Key in ['End']:
Quit()
return True
def OnMouseEvent(event):
print 'Position:', event.Position
return True
hm = pyHook.HookManager()
hm.MouseAll = OnMouseEvent
hm.HookMouse()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()
関数 CursorLeft は、1 回おきに正常に機能します。また、パラメーターとして負の数がなくても問題なく動作します。なぜこれが起こっているのか、私は完全に迷っています!
最初の呼び出し、大丈夫です。
2回目の電話、
TypeError: 整数が必要です
3 回目の電話、いいですね。
4 回目の呼び出し、
TypeError: 整数が必要です。
などなど。
解決済み
win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, -1, 0, 0, 0)
渡された最後の 2 つのパラメーターにより、関数は適切に動作します。理由はまだわかりませんが、知りたいのですが、少なくとも現在は機能しています。
解決済み
return True
イベント関数が true を返すことは非常に重要です。