python中使用pyhook實(shí)現(xiàn)鍵盤監(jiān)控的例子
pyhook下載:http://sourceforge.net/projects/pyhook/files/pyhook/1.5.1/
pyhookAPI手冊(cè):http://pyhook.sourceforge.net/doc_1.5.0/
以上網(wǎng)站上提供了幾個(gè)使用的例子,另外安裝pyhooks后,也會(huì)有一個(gè)例子的文件。于是拿來(lái)學(xué)習(xí)了一下,第一次運(yùn)行時(shí),提示沒(méi)有pythoncom模塊,就安裝了pywin32,安裝后,可以正常運(yùn)行,但是會(huì)導(dǎo)致機(jī)器發(fā)卡,特別是中斷程序運(yùn)行后,鼠標(biāo)會(huì)出現(xiàn)一段時(shí)間的自由晃動(dòng),找了半天原因,感覺(jué)主要是事件頻率過(guò)高,程序會(huì)經(jīng)??ㄔ趐ythoncom.PumpMessages()。
網(wǎng)上搜索了半天,看到有一帖子說(shuō)是pythoncom.PumpMessages(n),n表示延遲時(shí)間,于是試著改了下,發(fā)現(xiàn)有一定效果,但不明顯,后來(lái)想是不是因?yàn)闆](méi)有終止程序,才會(huì)導(dǎo)致一直很卡呢,于是添加終止程序語(yǔ)句win32api.PostQuitMessage()。結(jié)果還算滿意。
# -*- 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)) #寫入當(dāng)前窗體名 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)) #寫入當(dāng)前窗體名 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__": #創(chuàng)建hook句柄 hm = pyHook.HookManager() #監(jiān)控鍵盤 hm.KeyDown = onKeyboardEvent hm.HookKeyboard() #循環(huán)獲取消息 pythoncom.PumpMessages(10000)
相關(guān)文章
Flask模板渲染與Get和Post請(qǐng)求詳細(xì)介紹
這篇文章主要介紹了Flask模板渲染與Get和Post請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-09-092020新版本pycharm+anaconda+opencv+pyqt環(huán)境配置學(xué)習(xí)筆記,親測(cè)可用
這篇文章主要介紹了2020新版本pycharm+anaconda+opencv+pyqt環(huán)境配置學(xué)習(xí)筆記,親測(cè)可用,特此分享到腳本之家平臺(tái),需要的朋友可以參考下2020-03-03Python使用描述器實(shí)現(xiàn)ORM模型的方法詳解
這篇文章主要為大家詳細(xì)介紹了Python描述器實(shí)現(xiàn)ORM模型,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Python內(nèi)置函數(shù)bin() oct()等實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換
使用Python內(nèi)置函數(shù):bin()、oct()、int()、hex()可實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換;先看Python官方文檔中對(duì)這幾個(gè)內(nèi)置函數(shù)的描述,需要了解的朋友可以參考下2012-12-12Python3實(shí)現(xiàn)的字典、列表和json對(duì)象互轉(zhuǎn)功能示例
這篇文章主要介紹了Python3實(shí)現(xiàn)的字典、列表和json對(duì)象互轉(zhuǎn)功能,結(jié)合實(shí)例形式分析了Python使用json模塊針對(duì)json格式數(shù)據(jù)編碼轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2018-05-05PyCharm Anaconda配置PyQt5開(kāi)發(fā)環(huán)境及創(chuàng)建項(xiàng)目的教程詳解
這篇文章主要介紹了PyCharm Anaconda配置PyQt5開(kāi)發(fā)環(huán)境及創(chuàng)建項(xiàng)目的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-0330秒學(xué)會(huì)30個(gè)超實(shí)用Python代碼片段【收藏版】
許多人在數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、web開(kāi)發(fā)、腳本編寫和自動(dòng)化等領(lǐng)域中都會(huì)使用Python,它是一種十分流行的語(yǔ)言。本文將簡(jiǎn)要介紹30個(gè)簡(jiǎn)短的、且能在30秒內(nèi)掌握的代碼片段,感興趣的朋友一起看看吧2019-10-10