Python通過keyboard庫實(shí)現(xiàn)模擬和監(jiān)聽鍵盤
keyboard介紹
如果我們想要通過快捷鍵,來調(diào)用某段代碼,我們可以使用python的keyboard庫,這個(gè)庫可以用于發(fā)送,掛鉤,以及模擬鍵盤事件等,并且同時(shí)支持多種操作系統(tǒng)(但是需要注意的是,在某些系統(tǒng)中,需要以管理員的權(quán)限運(yùn)行才可以使用)
當(dāng)我們使用這個(gè)庫的時(shí)候,可以:
- 監(jiān)聽鍵盤事件:監(jiān)聽全局鍵盤事件,包括捕獲特定鍵的按下或釋放,記錄所有鍵盤輸入(這個(gè)功能可能很危險(xiǎn),需要小心使用)。
- 模擬按鍵輸入:模擬按鍵事件,如按下,釋放,或者同時(shí)按下多個(gè)鍵等。
- 熱鍵和快捷鍵:可以設(shè)置熱鍵或快捷鍵,來執(zhí)行特定的回調(diào)函數(shù)。
安裝keyboard庫,同樣需要使用pip:pip install keyboard
keyboard使用
監(jiān)聽所有鍵盤輸入
import keyboard def log_keystroke(event): print(f"Key {event.name} {'被按下' if event.event_type == 'down' else '被釋放'}") keyboard.hook(log_keystroke) # 使用esc鍵來停止監(jiān)聽 keyboard.wait("esc")
可以看到,現(xiàn)在我們所有的按鍵都會(huì)被清清楚楚的記錄下來
監(jiān)聽并回放鍵盤輸入
這個(gè)功能允許我們先輸入內(nèi)容,然后將所有的輸入內(nèi)容全部記錄下來,然后再需要的時(shí)候,重新回放(也就是再模擬輸入一次)
import keyboard import time # 記錄按鍵 keyboard.start_recording() # 設(shè)置記錄10秒的鍵盤輸入 time.sleep(10) events = keyboard.stop_recording() # 回放記錄的按鍵 keyboard.play(events) 監(jiān)聽特定鍵的按下和釋放 import keyboard def on_press_reaction(event): if event.name == "b": print("你為什么要按b?") keyboard.on_press(on_press_reaction) keyboard.wait("esc")
監(jiān)聽按鍵按下:keyboard.on_press()
監(jiān)聽按鍵釋放:keyboard.on_release()
設(shè)置熱鍵
import keyboard def print_message(): print("你為什么要召喚我?") # 設(shè)置熱鍵,例如alt+b keyboard.add_hotkey("alt+b", print_message) keyboard.wait("esc")
添加熱鍵:keyboard.add_hotkey()
清除所有的熱鍵:keyboard.clear_all_hotkeys()
阻止程序直到按鍵:keyboard.wait("esc")
模擬輸入
模擬文字輸入:keyboard.write()
模擬按鍵按下:keyboard.press()
模擬按鍵釋放:keyboard.release()
模擬按鍵按下并釋放:keyboard.send()
實(shí)際例子
插入時(shí)間信息
一些輸入法可能包含一個(gè)功能,可以快速插入一段時(shí)間信息,例如,將當(dāng)前時(shí)間2024-10-30 22:00:00插入到文章中。
import keyboard import datetime def write_timestamp(): current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") keyboard.write(current_time) keyboard.add_hotkey("ctrl+b", write_timestamp) keyboard.wait("esc")
當(dāng)然,我們可以對(duì)其進(jìn)行擴(kuò)展,插入更多的信息,例如,在寫文章的時(shí)候,同時(shí)插入作者信息,聯(lián)系方式等
import keyboard import datetime def write_info(name, mail): current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") info = f"作者:{name}\n聯(lián)系方式:{mail}\n創(chuàng)建時(shí)間:{current_time}" keyboard.write(info) keyboard.add_hotkey("ctrl+b", lambda: write_info("sagegrass", "sagegrass@outlook.com")) keyboard.wait("esc")
以下信息就是通過按鍵快速生成的,并非是我手動(dòng)輸入的
在設(shè)置熱鍵的時(shí)候,一定要注意與原本的快捷鍵沖突,如果設(shè)置的熱鍵沖突,即使程序正確,也可能無法運(yùn)行,甚至可能因?yàn)闆_突按鍵造成許多麻煩。
專注模式
原理:通過熱鍵,操作寫入hosts文件,將指定的網(wǎng)站重定向到127.0.0.1,以實(shí)現(xiàn)無法訪問。再次按下以后,清除這些信息,從而實(shí)現(xiàn)繼續(xù)訪問。
注意,寫入hosts以后,不一定能夠立即生效,可能需要一定時(shí)間的延遲。
import keyboard import os # 工作期間拒絕玩小游戲 blocked_websites = [ "4399.com", "www.4399.com" ] hosts_path = r"C:\Windows\System32\drivers\etc\hosts" redirect_ip = "127.0.0.1" is_focus_mode_on = False def toggle_focus_mode(): global is_focus_mode_on if not is_focus_mode_on: with open(hosts_path, "a") as file: for website in blocked_websites: file.write(f"{redirect_ip} {website}\n") print("專注模式已開啟,干擾網(wǎng)站已被屏蔽。") is_focus_mode_on = True else: with open(hosts_path, "r+") as file: lines = file.readlines() file.seek(0) for line in lines: if not any(website in line for website in blocked_websites): file.write(line) file.truncate() print("專注模式已關(guān)閉,干擾網(wǎng)站可正常訪問。") is_focus_mode_on = False keyboard.add_hotkey("ctrl+b", toggle_focus_mode) keyboard.wait("esc")
風(fēng)險(xiǎn)提示
需要注意的是,由于keyboard庫可以實(shí)現(xiàn)如讀取鍵盤輸入,模擬鍵盤按鍵等特殊性質(zhì)的功能,因此存在一些隱私和安全的風(fēng)險(xiǎn),需要小心謹(jǐn)慎。
比如說,使用keyboard,可能存在惡意軟件的風(fēng)險(xiǎn),比如說,該庫可以用于開發(fā)鍵盤記錄器,也就是人們常說的keylogger,這樣類型的惡意軟件能夠記錄用戶的鍵盤輸入,包括密碼或者其他的敏感信息。
因此,我們需要注意:
- 作為使用者,當(dāng)使用有包含keyboard庫的程序時(shí),要確保代碼來源的可靠性,避免使用來歷不明的python程序。
- 作為開發(fā)者,我們也需要保證用戶的隱私和知情權(quán),要告知軟件的行為和權(quán)限,更不能嘗試去制作和傳播鍵盤記錄器。
以上就是Python通過keyboard庫實(shí)現(xiàn)模擬和監(jiān)聽鍵盤的詳細(xì)內(nèi)容,更多關(guān)于Python keyboard模擬和監(jiān)聽鍵盤的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python使用open函數(shù)對(duì)文件進(jìn)行處理詳解
今天看了open函數(shù),看到w+ r+ a+ 這種可讀可寫的操作,下面這篇文章主要給大家介紹了關(guān)于python使用open函數(shù)對(duì)文件進(jìn)行處理的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Python讀取postgresql數(shù)據(jù)庫詳情
這篇文章主要介紹了Python讀取postgresql數(shù)據(jù)庫詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09pycharm新建Vue項(xiàng)目的方法步驟(圖文)
這篇文章主要介紹了pycharm新建Vue項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Python實(shí)現(xiàn)獲取當(dāng)前目錄下文件名代碼詳解
這篇文章主要介紹了Python實(shí)現(xiàn)獲取當(dāng)前目錄下文件名,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03跟老齊學(xué)Python之關(guān)于循環(huán)的小伎倆
不管是while還是for,所發(fā)起的循環(huán),在python編程中是經(jīng)常被用到的。特別是for,一般認(rèn)為,它要比while快,而且也容易寫(是否容易,可能因人而異,但是,執(zhí)行時(shí)間快,是的確的),因此在實(shí)踐中,for用的比較多點(diǎn)。2014-10-10matplotlib畫混淆矩陣與正確率曲線的實(shí)例代碼
混淆矩陣也稱誤差矩陣,是表示精度評(píng)價(jià)的一種標(biāo)準(zhǔn)格式,下面這篇文章主要給大家介紹了關(guān)于matplotlib畫混淆矩陣與正確率曲線的相關(guān)資料,需要的朋友可以參考下2021-06-06只用40行Python代碼就能寫出pdf轉(zhuǎn)word小工具
今天咱們介紹一個(gè)pdf轉(zhuǎn)word的免費(fèi)小工具,滿足這么一個(gè)不常見但是偶爾會(huì)出來煩人的需求文中有非常詳細(xì)的代碼示例,對(duì)小伙伴們很有幫助,需要的朋友可以參考下2021-05-05python實(shí)現(xiàn)隨機(jī)調(diào)用一個(gè)瀏覽器打開網(wǎng)頁
下面小編就為大家分享一篇python實(shí)現(xiàn)隨機(jī)調(diào)用一個(gè)瀏覽器打開網(wǎng)頁,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04