python 偷懶技巧——使用 keyboard 錄制鍵盤事件
之前在某本書上看到一個(gè)程序,可以通過 Python 記錄下全局范圍內(nèi)的鍵盤事件,使用的是 ctypes 庫。
后來幾經(jīng)嘗試,始終不能成功運(yùn)行。原來它只支持 Python2 和 32 位的 Windows 系統(tǒng)。。。Excuse me?
于是在網(wǎng)上查找可行的替代方案,比如 pyHook 。呃,不合胃口。安裝比較繁瑣(有依賴庫且不能通過 pip 命令安裝),只支持 Windows 系統(tǒng),況且又是十年前就沒再更新的項(xiàng)目。。??戳讼潞瘮?shù)調(diào)用也算不上簡潔直觀。
后來又多番搜索,終于找到了一個(gè)名為keyboard 的 Python 庫,可以綁定全局事件、錄制及模擬鍵盤輸入、設(shè)置熱鍵等。
尤其是安裝和使用足夠簡單,比較合我的心意(畢竟 Github 上將近 1.5K 的小星星)。
一、特性
- 全局范圍內(nèi)的鍵盤事件綁定。即程序可以后臺運(yùn)行,捕捉其他軟件下的按鍵動(dòng)作。
- 跨平臺,支持 Windows 、Linux 以及 MacOS 系統(tǒng)。支持 Python2 和 Python3 。
- 純 Python 代碼,無需編譯 C 語言模塊。無依賴庫,安裝簡單(只是復(fù)制文件就可以)。
- 通過獨(dú)立的線程捕捉事件,不阻塞主程序的運(yùn)行。
- 很詳細(xì)的文檔,參見項(xiàng)目主頁的 README 。
其實(shí)我真的有點(diǎn)感覺,這才是我心目中比較“現(xiàn)代”的工具。
二、錄制及模擬按鍵動(dòng)作
就像前面提到的,安裝 keyboard 的流程非常簡單,無需考慮任何兼容性或者依賴問題,只需要一條簡短的命令:
$ pip install keyboard
可以使用下面的代碼錄制 10 秒鐘的鍵盤事件,并將其回放一遍(即重復(fù)按下之前操作的按鍵):
import keyboard import time keyboard.start_recording() time.sleep(10) events = keyboard.stop_recording() keyboard.replay(events)
可以使用如下代碼制作一個(gè)簡單的 “鍵盤錄制器” (打印輸出全局范圍內(nèi)的按鍵動(dòng)作,并將按鍵順序保存在文本文件中):
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 并不是對應(yīng)按鍵的 ASCII 碼,而是根據(jù)鍵盤布局為按鍵指定的數(shù)值(如 a 鍵為 30,b 鍵為 42 等等),可以通過自行測試確認(rèn)具體的對應(yīng)關(guān)系。
如同時(shí)按下兩個(gè)或多個(gè)按鍵,則上述程序會(huì)以 code, code... 的形式輸出。
三、熱鍵捕獲及綁定
可以使用如下代碼錄制熱鍵并為該熱鍵綁定上特定的觸發(fā)事件:
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 項(xiàng)目的 Github 主頁 。
幾種常見的使用示例也已經(jīng)包含在項(xiàng)目代碼的 examples 目錄下。
以上就是python 偷懶技巧——使用 keyboard 錄制鍵盤事件的詳細(xì)內(nèi)容,更多關(guān)于python keyboard 錄制鍵盤事件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)的簡單RPG游戲流程實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)的簡單RPG游戲流程,實(shí)例分析了Python實(shí)現(xiàn)RPG游戲流程的常用判定技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-06-06Python實(shí)現(xiàn)釘釘/企業(yè)微信自動(dòng)打卡的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)釘釘/企業(yè)微信自動(dòng)打卡的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02python實(shí)現(xiàn)自動(dòng)發(fā)送郵件發(fā)送多人、群發(fā)、多附件的示例
下面小編就為大家分享一篇python實(shí)現(xiàn)自動(dòng)發(fā)送郵件發(fā)送多人、群發(fā)、多附件的示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01python 列表元素左右循環(huán)移動(dòng) 的多種解決方案
這篇文章主要介紹了python 列表元素左右循環(huán)移動(dòng) 的多種解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03