Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python for Autohotkey style key-combination sniffing, automation?

I want to automate several tasks (eg. simulate eclipse style ctrl-shift-R open dialog for other editors). The general pattern is: the user will press some key combination, my program will detect it and potentially pop up a dialog to get user input, and then run a corresponding command, typically by running an executable.

My target environment is windows, although cross-platform would be nice. My program would be started once, read a configuration file, and sit in the background till triggered by a key combination or other event.

Basically autohotkey.

Why not just use autohotkey? I actually have quite a few autohotkey macros, but I'd prefer to use a saner language.

My question is: is there a good way to have a background python process detect key combinations?

Update: found the answer using pyHook and the win32 extensions:

import pyHook
import pythoncom

def OnKeyboardEvent(event):
    print event.Ascii

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()

while True:
    pythoncom.PumpMessages()
like image 463
Parand Avatar asked Nov 16 '08 19:11

Parand


2 Answers

You may want to look at AutoIt. It does everything that AutoHotKey can do, but the language syntax doesn't make you want to pull your hair out. Additonally, it has COM bindings so you can use most of it's abilities easily in python if you so desired. I've posted about how to do it here before.

like image 104
Dustin Wyatt Avatar answered Nov 06 '22 20:11

Dustin Wyatt


Found the answer using pyHook and the win32 extensions:

import pyHook
import pythoncom

def OnKeyboardEvent(event):
    print event.Ascii

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()

while True:
    pythoncom.PumpMessages()
like image 40
Parand Avatar answered Nov 06 '22 21:11

Parand