1

I created a simple keylogging program. Everything that is typed on keyboard is sent to a log.txt file. The problem is that my code works only for ASCII code. When I type greek characters , they get treated as english.

I want my code to:

  1. Accept Greek characters or other languages,too (Generally all kind of characters)
  2. Log events such us Alt, Ctrl etc

My code so far:

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()

Should my program accept Unicode?

How can it do so?

Haki Terror
  • 343
  • 3
  • 15

1 Answers1

0

I would suggest you using a different module. I've tried using PyHook myself, but this caused issues with me while pressing deadkeys ('`^) Usually other languages which use special letters like á, contain deadkeys. PyHook doesn't handle them well. The module I'm using currently is keyboard. Keyboard handles deadkeys properly, and doesn't show some weird behaviour while being encountered with them. Maybe keyboard is a solution for you as well. An example for using keyboard is the following:

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()

Tested on Python 3.5

Irash
  • 65
  • 8