単純なキーロガーによって検出されたキーボードの押下を別のスレッドにルーティングしようとしています。私のプログラムは、次のようなスレッドでキー ロギングを設定します。
import threading
import Queue
import pythoncom
import pyHook
stopevent = threading.Event() #how to stop each thread later
q1 = Queue.Queue() #a threading queue for inter proc comms
def OnKeyboardEvent(event):
return event
def thread1(q1,stopevent):
while (not stopevent.is_set()):
print q1.get() #print what key events are registered/pumped
def thread2(q1,stopevent):
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
while (not stopevent.is_set()):
pythoncom.PumpWaitingMessages()
#q1.put(something????)
hm.UnhookKeyboard()
t1 = threading.Thread(target=thread1,args=(q1,stopevent))
t2 = threading.Thread(target=thread2,args=(q1,stopevent))
t1.start()
t2.start()
フックによってキャプチャされた「イベント」をq1にルーティングしようとしています。これにより、スレッド1で使用できるようになります。私のコードが q1.put() の重要な呼び出しを行っていないことに気付くでしょう。正直なところ、イベントを返すように「OnKeyboardEvent」関数をプログラムしましたが、イベントがどこに返されるのか、またはどのように取得するのかわかりません。これは私が助けを必要としているものです。HookManager() クラス定義を調べましたが、使用できると思われるものは何もありませんでした。
良心的なプログラマーにとって、これはハッキングではなく科学のためのものです。キーボード入力に基づいてトレッドミルの速度を制御しようとしています。