Search code examples
pythonsendkeys

Python Detect Keystrokes Sent to Another Application


I have a Python program that sends keystrokes to another application using SendKeys. Some of the keystrokes, however, must be sent to the application after it does some processing (which takes an unknown amount of time). So far I have had to let the Python application know the processing was finished by Alt+Tabbing back to the DOS window and hitting Enter. I'd like to have a key combination (Shift+F1 or something like that) that I can hit in the receiving application that signals the Python program to continue without me having to switch back to the DOS window. How would I make it so I can detect keystrokes in Python even though the focus is on another window?


Solution

  • Have a look at pyHook.

    It allows Keyboard hooking:

    import pythoncom, pyHook 
    
    def OnKeyboardEvent(event):
      print 'MessageName:',event.MessageName
      print 'Message:',event.Message
      print 'Time:',event.Time
      print 'Window:',event.Window
      print 'WindowName:',event.WindowName
      print 'Ascii:', event.Ascii, chr(event.Ascii)
      print 'Key:', event.Key
      print 'KeyID:', event.KeyID
      print 'ScanCode:', event.ScanCode
      print 'Extended:', event.Extended
      print 'Injected:', event.Injected
      print 'Alt', event.Alt
      print 'Transition', event.Transition
      print '---'
    
    # return True to pass the event to other handlers
      return True
    
    # create a hook manager
    hm = pyHook.HookManager()
    # watch for all mouse events
    hm.KeyDown = OnKeyboardEvent
    # set the hook
    hm.HookKeyboard()
    # wait forever
    pythoncom.PumpMessages()