首頁 > 軟體

python 偷懶技巧——使用 keyboard 錄製鍵盤事件

2020-09-21 12:00:28

之前在某本書上看到一個程式,可以通過 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 錄製鍵盤事件的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com