python 偷懶技巧——使用 keyboard 錄製鍵盤事件
之前在某本書上看到一個程式,可以通過 Python 記錄下全域性範圍內的鍵盤事件,使用的是 ctypes 庫。
後來幾經嘗試,始終不能成功執行。原來它只支援 Python2 和 32 位的 Windows 系統。。。Excuse me?
於是在網上查詢可行的替代方案,比如 pyHook 。呃,不合胃口。安裝比較繁瑣(有依賴庫且不能通過 pip 命令安裝),只支援 Windows 系統,況且又是十年前就沒再更新的專案。。。看了下函式呼叫也算不上簡潔直觀。
後來又多番搜尋,終於找到了一個名為keyboard 的 Python 庫,可以繫結全域性事件、錄製及模擬鍵盤輸入、設定熱鍵等。
尤其是安裝和使用足夠簡單,比較合我的心意(畢竟 Github 上將近 1.5K 的小星星)。
一、特性
- 全域性範圍內的鍵盤事件繫結。即程式可以後臺執行,捕捉其他軟體下的按鍵動作。
- 跨平臺,支援 Windows 、Linux 以及 MacOS 系統。支援 Python2 和 Python3 。
- 純 Python 程式碼,無需編譯 C 語言模組。無依賴庫,安裝簡單(只是複製檔案就可以)。
- 通過獨立的執行緒捕捉事件,不阻塞主程式的執行。
- 很詳細的文件,參見專案主頁的 README 。
其實我真的有點感覺,這才是我心目中比較“現代”的工具。
二、錄製及模擬按鍵動作
就像前面提到的,安裝 keyboard 的流程非常簡單,無需考慮任何相容性或者依賴問題,只需要一條簡短的命令:
$ pip install keyboard
可以使用下面的程式碼錄製 10 秒鐘的鍵盤事件,並將其回放一遍(即重複按下之前操作的按鍵):
import keyboard import time keyboard.start_recording() time.sleep(10) events = keyboard.stop_recording() keyboard.replay(events)
可以使用如下程式碼製作一個簡單的 “鍵盤錄製器” (列印輸出全域性範圍內的按鍵動作,並將按鍵順序儲存在文字檔案中):
import keyboard def 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 並不是對應按鍵的 ASCII 碼,而是根據鍵盤佈局為按鍵指定的數值(如 a 鍵為 30,b 鍵為 42 等等),可以通過自行測試確認具體的對應關係。
如同時按下兩個或多個按鍵,則上述程式會以 code,code... 的形式輸出。
三、熱鍵捕獲及繫結
可以使用如下程式碼錄製熱鍵併為該熱鍵繫結上特定的觸發事件:
import keyboard print('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 主頁 。
幾種常見的使用示例也已經包含在專案程式碼的 examples 目錄下。
以上就是python 偷懶技巧——使用 keyboard 錄製鍵盤事件的詳細內容,更多關於python keyboard 錄製鍵盤事件的資料請關注我們其它相關文章!