ホームページ > バックエンド開発 > Python チュートリアル > pyhook を使用して Python でキーボード監視を実装する例

pyhook を使用して Python でキーボード監視を実装する例

WBOY
リリース: 2016-06-16 08:43:08
オリジナル
1779 人が閲覧しました

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)
ログイン後にコピー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート