1. 程式人生 > 程式設計 >python 偷懶技巧——使用 keyboard 錄製鍵盤事件

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)

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

可以使用如下程式碼製作一個簡單的 “鍵盤錄製器” (列印輸出全域性範圍內的按鍵動作,並將按鍵順序儲存在文字檔案中):

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()

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

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.")

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

其他的使用方式就不再一一列舉了,可以參考 keyboard 專案的 Github 主頁 。

幾種常見的使用示例也已經包含在專案程式碼的 examples 目錄下。

以上就是python 偷懶技巧——使用 keyboard 錄製鍵盤事件的詳細內容,更多關於python keyboard 錄製鍵盤事件的資料請關注我們其它相關文章!