用Python的pynput庫成為按鍵記錄高手

哈嘍,大家好,我是木頭左!

揭秘鍵盤輸入:pynput庫的基本介紹

無論是為了安全審計、數據分析還是創建熱鍵操作,能夠記錄和處理鍵盤事件都顯得尤為關鍵。這就是pynput庫發揮作用的地方。pynput是一個Python庫,它允許你控制和監聽鼠標和鍵盤輸入。在本節中,將探討pynput庫的基本概念,以及如何使用它來捕捉鍵盤事件。

安裝與配置pynput

要開始使用pynput,首先需要安裝它。可以通過pip命令輕松安裝:

pip install pynput

安裝完成后,你就可以導入pynput.keyboard模塊并開始監聽鍵盤事件了。

理解鍵盤監聽的應用場景

鍵盤監聽功能可以用于多種場景,包括但不限于:

  • 創建日志記錄器以跟蹤用戶活動
  • 開發家長控制軟件,監控孩子的在線行為
  • 創建自動化腳本,響應特定的鍵盤輸入
  • 為游戲或應用程序開發作弊工具(請注意,這可能違反服務條款)

通過pynput,你可以捕獲每一個擊鍵事件,并據此執行相應的操作。

實戰演練:記錄每一次擊鍵

要記錄鍵盤上的每一個按鍵,你需要編寫一個監聽器。這個監聽器會實時捕捉鍵盤事件,并將它們記錄下來。以下是一個簡單的例子,展示了如何實現這一功能。

創建基本的按鍵記錄器

需要創建一個監聽器類,繼承自pynput.keyboard.Listener。在這個類中,可以定義on_presson_release方法,分別在按下和釋放鍵時被調用。

from pynput import keyboardclass KeyLogger:def __init__(self):self.keys = []def on_press(self, key):self.keys.append(key)print(f'{key} pressed')def on_release(self, key):print(f'{key} release')if str(key) == 'Key.esc':  # 如果按下的是Esc鍵,停止監聽return False

在這個例子中,創建了一個名為KeyLogger的類,它會記錄下每個按鍵,并在控制臺上打印出來。當按下Esc鍵時,監聽器將停止。

運行監聽器并捕獲數據

要啟動監聽器,只需創建一個KeyLogger實例,并調用其start方法。這將開始記錄所有按鍵,直到按下Esc鍵為止。

if __name__ == "__main__":with KeyLogger() as kl:kl.start()

這段代碼將啟動鍵盤監聽器,并持續記錄直到用戶按下Esc鍵。記錄的數據可以用于后續的分析或處理。

深入分析:處理和存儲按鍵數據

記錄按鍵只是第一步,接下來需要對這些數據進行處理和存儲,以便進一步分析和使用。在本節中,將探討如何處理和存儲這些按鍵數據。

數據處理:解析和轉換按鍵信息

pynput庫提供的按鍵信息非常詳細,包括按鍵的名稱、類型、持續時間等。為了有效地處理這些數據,需要對其進行解析和轉換。例如,你可能想要將所有按鍵轉換為小寫,或者只記錄特定的按鍵組合。

def process_key_data(self, key):# 這里可以添加你的處理邏輯,比如過濾特定的按鍵return str(key).lower()

通過定義一個process_key_data方法,你可以在記錄之前對按鍵數據進行預處理。

數據存儲:本地文件或數據庫

一旦你有了處理后的按鍵數據,下一步就是存儲它們。你可以選擇將數據保存到本地文件,或者存儲到數據庫中。如果你選擇使用文件,可以使用Python的文件操作函數來實現。如果你想使用數據庫,可以考慮使用SQLite或其他輕量級數據庫。

def save_to_file(self, key_data):with open('key_log.txt', 'a') as f:f.write(key_data + '
')

這個save_to_file方法將按鍵數據追加到一個名為key_log.txt的文件中。每次記錄新的按鍵時,都會調用這個方法。

高級技巧:打造個性化按鍵記錄器

現在你已經掌握了基本的按鍵記錄技術,是時候進一步提升你的技能了。在本節中,將討論一些高級技巧,幫助你打造一個更加個性化和強大的按鍵記錄器。

自定義監聽器以滿足特定需求

不同的應用場景可能需要不同的監聽器設置。例如,你可能只想記錄某些特定的按鍵,或者在特定的時間段內記錄。通過自定義pynput.keyboard.Listener類的子類,你可以實現這些特定的需求。

class CustomKeyLogger(KeyLogger):def on_press(self, key):if self.should_record(key):  # 自定義判斷邏輯super().on_press(key)

在這個CustomKeyLogger類中,重寫了on_press方法,并添加了一個should_record方法來判斷是否應該記錄某個按鍵。

結合其他工具增強功能

除了使用pynput庫之外,你還可以結合其他工具來增強你的按鍵記錄器的功能。例如,你可以使用subprocess模塊來運行系統命令,或者使用socket庫來將數據發送到遠程服務器。

import subprocessclass AdvancedKeyLogger(KeyLogger):def on_press(self, key):super().on_press(key)# 運行系統命令,例如啟動一個截圖工具subprocess.run(['screenshot_tool'])

在這個AdvancedKeyLogger類中,在記錄按鍵的同時運行了一個系統命令來獲取屏幕截圖。這樣,你就可以同時記錄按鍵和屏幕活動了。

我是木頭左,感謝各位童鞋的點贊、收藏,我們下期更精彩!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12106.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 對象序列化

序列化:把對象轉化為可傳輸的字節序列過程稱為序列化。 反序列化:把字節序列還原為對象的過程稱為反序列化 序列化的作用是方便存儲和傳輸,細節可參考如下文章: 序列化理解起來很簡單 - 知乎序列化的定義 序列化:把對…

echarts map地圖添加背景圖

給map地圖添加了一個陰影3d的效果&#xff0c;添加一張背景圖&#xff0c;給人感覺有3d的效果 具體配置如下&#xff1a; html代碼模塊&#xff1a; <div class"echart_img" style"position: fixed; visibility: hidden;"></div><div id&q…

Autoware內容學習與初步探索(一)

0. 簡介 之前作者主要是基于ROS2&#xff0c;CyberRT還有AutoSar等中間件完成搭建的。有一說一&#xff0c;這種從頭開發當然有從頭開發的好處&#xff0c;但是如果說絕大多數的公司還是基于現成的Apollo以及Autoware來完成的。這些現成的框架中也有很多非常好的方法。目前作者…

【Java的抽象類和接口】

1. 抽象類 1.1 抽象類概念 在面向對象的概念中&#xff0c;所有的對象都是通過類來描繪的&#xff0c;但是反過來&#xff0c;并不是所有的類都是用來描繪對象的&#xff0c;如果 一個類中沒有包含足夠的信息來描繪一個具體的對象&#xff0c;這樣的類就是抽象類。 以上代碼中…

Leaflet系列——【一】初識Leaflet與Leaflet視圖操作

初識Leaflet&#xff08;vue3 &#xff09; 前言&#xff1a;當你熟悉了openlayer、mapbox、cesium等一些GIS框架之后&#xff0c;對于我們開發來說其實他們的本質就是往瓦片上面疊加圖層、【點、線、面、瓦片、geoJson、熱力圖、圖片、svg等等】都是一層層的Layer圖層&#xf…

MySQL中的多表設計

由于業務之間的相互關聯&#xff0c;所以各個表結構之間也存在著各種聯系 基本分為三種&#xff1a; 一對多 多對多 一對一 外鍵語法 create table 表名&#xff08; 字段名 數據類型&#xff0c; ... [constraint] 外鍵名稱 foreign key &#xff08;外鍵字段名&#…

銀川項目外包找邦芒 助力企業減壓增效

銀川邦芒人力項目外包&#xff0c;是指企業將原本由自身承擔的具有基礎性、共性、非核心的IT業務和基于IT的業務流程&#xff0c;委托給專業的外部服務提供商來執行的一種經濟活動。這種全方位的企業用工解決方案&#xff0c;旨在幫助企業優化資源配置、降低成本、提升效率&…

相同的隨機種子CPU和GPU上torch.nn.init.xavier_normal_結果并不一致

相同的隨機種子CPU和GPU上torch.nn.init.xavier_normal_結果并不一致 一.測試代碼二.輸出 在訓練pytorch模型時,相同的隨機種子,不同的服務器上loss并不一樣,通過調試發現這二個平臺的權值也不一樣.單獨測試torch.nn.init.xavier_normal_,發現也不一樣.如果都放在CPU上則二臺服…

Ceph集群擴容及數據再均衡原理分析

用戶文件在Ceph RADOS中存儲、定位過程大概包括&#xff1a;用戶文件切割成對象、對象映射到PG、PG分組PGP、PG映射到OSD。這些過程中&#xff0c;可能涉及了大量概念和變量&#xff0c;而其實它們大部分是通過HASH、CRUSH等算法計算出來的&#xff0c;初始參數可能也就只有這么…

sql實踐

1.從excel導入數據 在excel導入數據時要先在數據庫中創建對應的數據庫表 CREATE TABLE your_table_name (crawl_datetime DATE,url CHAR(255),company_name CHAR(255),company_size CHAR(255),company_type CHAR(255),job_type CHAR(255),job_name CHAR(255),edu CHAR(255),e…

暗區突圍TWITCH掉寶關聯帳號不了 無法關聯帳號 關聯不上

Twitch&#xff0c;作為全球知名的游戲直播平臺&#xff0c;常常攜手熱門游戲如《暗區突圍》舉辦互動活動&#xff0c;為玩家帶來獨特的參與體驗。在這個過程中&#xff0c;“綁定關聯”成為了連接直播觀眾與游戲世界的橋梁。簡單來說&#xff0c;Twitch綁定關聯《暗區突圍》指…

leetcode——鏈表的中間節點

876. 鏈表的中間結點 - 力扣&#xff08;LeetCode&#xff09; 鏈表的中間節點是一個簡單的鏈表OJ。我們要返回中間節點有兩種情況&#xff1a;節點數為奇數和節點數是偶數。如果是奇數則直接返回中間節點&#xff0c;如果是偶數則返回第二個中間節點。 這道題的解題思路是&a…

OpenAI 發布了免費的 GPT-4o,國內大模型還有哪些機會?

大家好&#xff0c;我是程序員X小鹿&#xff0c;前互聯網大廠程序員&#xff0c;自由職業2年&#xff0c;也一名 AIGC 愛好者&#xff0c;持續分享更多前沿的「AI 工具」和「AI副業玩法」&#xff0c;歡迎一起交流~ 這是今天在某乎看到一個問題&#xff1a;OpenAI 發完 GPT-4o&…

關閉 Visual Studio Code 項目中 的eslint的語法校驗 lintOnSave: false;; 項目運行起來之后 自動打開瀏覽器 端口

1、在 vue.config.js 配置 一個屬性 lintOnSave: false 2、配置兩個屬性 open: true, // 自動打開瀏覽器 port: 3000 // 端口 port 端口號根據自己的項目實際開發來 配置

Lumina-T2X 一個使用 DiT 架構的內容生成模型,可通過文本生成圖像、視頻、多視角 3D 對象和音頻剪輯。

Lumina-T2X 是一個新的內容生成系列模型&#xff0c;統一使用 DiT 架構。通過文本生成圖像、視頻、多視角 3D 對象和音頻剪輯。 可以在大幅提高生成質量的前提下大幅減少訓練成本&#xff0c;而且同一個架構支持不同的內容生成。圖像質量相當不錯。 由 50 億參數的 Flag-DiT …

structured concurrency

1. 基于 c executions的異步實現 - 從理論到實踐 - 知乎 (zhihu.com)

kubeadm部署k8s v1.30

k8s 1.30主要新功能 kubelet 重啟后穩健的 VolumeManager 重建&#xff08;SIG Storage&#xff09; 防止在卷還原過程中未經授權的卷模式轉換&#xff08;SIG Storage&#xff09; Pod 調度可用性&#xff08;SIG Scheduling&#xff09; PodTopologySpread 中的最小域數&a…

VitePress變成可視化了

VitePressSimple 非技術人員搭建博客的門檻又降低了&#xff0c;這個開源項目把VitePress變成可視化了。 要搭建博客、教程網站&#xff0c;VitePress是門檻最低的方案之一&#xff0c;唯一和技術有關的就是會用到編輯器來操作。 現在好了&#xff0c;VitePressSimple直接把Vit…

Java 枚舉的使用與反射應用

文章目錄 一、定義方式1.1 簡單定義1.2 帶參數定義 二、反射應用1. 反射獲取枚舉常量2. 反射獲取枚舉屬性3. 動態調用枚舉方法4. 動態設置枚舉屬性5. 判斷枚舉類型6. 反射獲取枚舉信息 單例模式&#xff1a;枚舉類型是一種有限實例的類&#xff0c;枚舉常量在定義時就被限定為一…

解決在云服務器上無法使用QQ郵箱發送郵件的問題

最近在做測試demo的時候發現&#xff0c;在本地可以使用qq郵箱的服務來進行郵件的發送&#xff0c;但是把項目部署到云服務器上就沒辦法發送郵件&#xff0c;并且報錯是連接超時&#xff1a; 向xxxxxqq.com用戶發送綁定郵箱驗證碼異常&#xff1a;Mail server connection fail…