python 偷懶技巧——使用 keyboard 錄制鍵盤事件
之前在某本書上看到一個程序,可以通過 Python 記錄下全局范圍內(nèi)的鍵盤事件,使用的是 ctypes 庫。后來幾經(jīng)嘗試,始終不能成功運行。原來它只支持 Python2 和 32 位的 Windows 系統(tǒng)。。。Excuse me?于是在網(wǎng)上查找可行的替代方案,比如 pyHook 。呃,不合胃口。安裝比較繁瑣(有依賴庫且不能通過 pip 命令安裝),只支持 Windows 系統(tǒng),況且又是十年前就沒再更新的項目。。。看了下函數(shù)調(diào)用也算不上簡潔直觀。
后來又多番搜索,終于找到了一個名為keyboard 的 Python 庫,可以綁定全局事件、錄制及模擬鍵盤輸入、設(shè)置熱鍵等。尤其是安裝和使用足夠簡單,比較合我的心意(畢竟 Github 上將近 1.5K 的小星星)。
一、特性
全局范圍內(nèi)的鍵盤事件綁定。即程序可以后臺運行,捕捉其他軟件下的按鍵動作。 跨平臺,支持 Windows 、Linux 以及 MacOS 系統(tǒng)。支持 Python2 和 Python3 。 純 Python 代碼,無需編譯 C 語言模塊。無依賴庫,安裝簡單(只是復(fù)制文件就可以)。 通過獨立的線程捕捉事件,不阻塞主程序的運行。 很詳細(xì)的文檔,參見項目主頁的 README 。其實我真的有點感覺,這才是我心目中比較“現(xiàn)代”的工具。
二、錄制及模擬按鍵動作
就像前面提到的,安裝 keyboard 的流程非常簡單,無需考慮任何兼容性或者依賴問題,只需要一條簡短的命令:
$ pip install keyboard
可以使用下面的代碼錄制 10 秒鐘的鍵盤事件,并將其回放一遍(即重復(fù)按下之前操作的按鍵):
import keyboardimport timekeyboard.start_recording()time.sleep(10)events = keyboard.stop_recording()keyboard.replay(events)
可以使用如下代碼制作一個簡單的 “鍵盤錄制器” (打印輸出全局范圍內(nèi)的按鍵動作,并將按鍵順序保存在文本文件中):
import keyboarddef print_pressed_keys(e): line = ’, ’.join(str(code) for code in keyboard._pressed_events) print(line) with open(’keylogger.txt’, ’a+’) as f: f.write(line + ’n’)keyboard.hook(print_pressed_keys)keyboard.wait()
PS:上述代碼中的 code 并不是對應(yīng)按鍵的 ASCII 碼,而是根據(jù)鍵盤布局為按鍵指定的數(shù)值(如 a 鍵為 30,b 鍵為 42 等等),可以通過自行測試確認(rèn)具體的對應(yīng)關(guān)系。
如同時按下兩個或多個按鍵,則上述程序會以 code, code... 的形式輸出。
三、熱鍵捕獲及綁定
可以使用如下代碼錄制熱鍵并為該熱鍵綁定上特定的觸發(fā)事件:
import keyboardprint(’Press and release your desired hotkey: ’)hotkey = keyboard.read_hotkey()print(’Hotkey selected: ’, hotkey)def on_triggered(): print('Triggered!')keyboard.add_hotkey(hotkey, on_triggered)print('Press ESC to stop.')
其他的使用方式就不再一一列舉了,可以參考 keyboard 項目的 Github 主頁 。
幾種常見的使用示例也已經(jīng)包含在項目代碼的 examples 目錄下。
以上就是python 偷懶技巧——使用 keyboard 錄制鍵盤事件的詳細(xì)內(nèi)容,更多關(guān)于python keyboard 錄制鍵盤事件的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. chat.asp聊天程序的編寫方法2. jsp EL表達式詳解3. Django程序的優(yōu)化技巧4. XML入門的常見問題(一)5. Python多線程操作之互斥鎖、遞歸鎖、信號量、事件實例詳解6. IntelliJ IDEA 統(tǒng)一設(shè)置編碼為utf-8編碼的實現(xiàn)7. Django ORM實現(xiàn)按天獲取數(shù)據(jù)去重求和例子8. Jsp中request的3個基礎(chǔ)實踐9. idea設(shè)置自動導(dǎo)入依賴的方法步驟10. 怎樣才能用js生成xmldom對象,并且在firefox中也實現(xiàn)xml數(shù)據(jù)島?
