pythonでpyHookを使ってキーロガーを作る (Windows) ②
今回は下記のpyHookのリファレンスを見て、コードの意味を探る。
API Documentation
# フックマネージャーの作成とコールバック関数の登録を行う
hkm=pyHook.HookManager()
hkm.KeyDown=Press
上記のコードの意味を調べる。
①
hkm=pyHook.HookManager()
でHookManagerクラスのインスタンスを作成する。
②
hkm.KeyDown=KeyStroke
KeyDownについてはHookManagerクラス内で
KeyDown=property(fset=SubscribeKeyDown)
と記されていて、セッターが定義されている。
このセッターは
def SubscribeKeyDown(self, func): if func is None: self.disconnect(self.keyboard_funcs, HookConstants.WM_KEYDOWN) self.disconnect(self.keyboard_funcs, HookConstants.WM_SYSKEYDOWN) else: self.connect(self.keyboard_funcs, HookConstants.WM_KEYDOWN, func) self.connect(self.keyboard_funcs, HookConstants.WM_SYSKEYDOWN, func)
と定義されていて、この関数にPress()関数(登録したい自作のコールバック関数)が渡される。
この関数はconnect関数にコールバック関数を管理するkeyboard_funcsディクショナリとイベントタイプ、Press()関数を渡す。
connect関数は
def connect(self, switch, id, func): switch(id)=func
と定義されていて、ここでkeyboard_funcsディクショナリにPress()関数を登録する。
確認してみる
・ソースコード
from ctypes import * import pythoncom import pyHook import sys def Press(event): print(event.Key) if event.Key=='Q': sys.exit() return True hkm=pyHook.HookManager() hkm.KeyDown=Press print(hkm.keyboard_funcs) hkm.KeyUp=Press print(hkm.keyboard_funcs) hkm.HookKeyboard() pythoncom.PumpMessages()
・実行結果
> python .\sample.py {256: <function Press at 0x02D90810>, 260: <function Press at 0x02D90810>} {256: <function Press at 0x02D90810>, 260: <function Press at 0x02D90810>, 257: <function Press at 0x02D90810>, 261: <function Press at 0x02D90810>} Return Q >
確かにkeyboard_funcsディクショナリにコールバック関数が登録されている。
(間違い等あればコメントよろしくお願いいたします。)