キーダウンモーションのイベントを観察するために、このコードを書きました。問題は、このスクリプトを実行すると、特定のプログラムがこのプログラムをクラッシュさせ、次のエラー メッセージが表示されることです。
TypeError: KeyboardSwitch() missing 8 required positional arguments: 'msg', 'vk_
code', 'scan_code', 'ascii', 'flags', 'time', 'hwnd', and 'win_name'
クラッシュが確認されたプログラムには、Skype、Sublime Text 2 などがあります。
デバッグを数回試行した後、問題は最終行で発生しているように見えますが、絞り込むことができないようです。また、コンパイラによって返される KeyboardSwitch() の意味もわかりません...
また、プログラムがこのエラー メッセージを交互に返すこともわかりました。
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\pyHook\HookManager.py", line 351, in KeyboardSwitch
return func(event)
File "observe.py", line 6, in OnKeyboardEvent
print ('MessageName:',event.MessageName)
TypeError: an integer is required (got type NoneType)
原因は何ですか?また、これを修正するにはどうすればよいですか?
import pyHook, pythoncom
def OnKeyboardEvent(event):
# Source: http://code.activestate.com/recipes/553270-using-pyhook-to-block-windows-keys/
print ('MessageName:',event.MessageName)
print ('Message:',event.Message)
print ('Time:',event.Time)
print ('Window:',event.Window)
print ('WindowName:',event.WindowName)
print ('Ascii:', event.Ascii, chr(event.Ascii))
print ('Key:', event.Key)
print ('KeyID:', event.KeyID)
print ('ScanCode:', event.ScanCode)
print ('Extended:', event.Extended)
print ('Injected:', event.Injected)
print ('Alt', event.Alt)
print ('Transition', event.Transition)
print ('---')
hooks_manager = pyHook.HookManager()
hooks_manager.KeyDown = OnKeyboardEvent
hooks_manager.HookKeyboard()
pythoncom.PumpMessages()
PS初心者として、私はpythoncomの機能にあまり慣れておらず、オンラインの定義はかなり曖昧に見えます。pythoncom と PumpMessages の機能に関する説明をいただければ幸いです。
ありがとう