5
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 を返すことは非常に重要です。

4

1 に答える 1

1

この質問を「未回答」フィルターから削除するために、コメントから回答をコピーします。

return True

イベント関数が true を返すことは非常に重要です。

~ジャンカごとの回答

于 2013-10-10T04:59:00.150 に答える