我正在使用Windows上的python自定义的街机启动器。 我想select系统和游戏,然后启动模拟器 – 并要求一定的组合键杀死模拟器。 我所有的关键钩子都在随机应用程序testing时工作,但是当我真正启动仿真器(如Nestopia)时,我的关键钩子失败了。 我目前正在使用RegisterHotKey,它获取事件,但不是热键。 任何人都有一个想法,如何在Nestopia之前安装足够低的实际事件? 这是我的代码:
import ctypes import win32con from ctypes import wintypes from ctypes import byref user32 = ctypes.windll.user32 class SimpleKeyboardHook: def getNextId(self): SimpleKeyboardHook._id += 1 return SimpleKeyboardHook._id # modifiers is a bitmask with win32con.[MOD_SHIFT, MOD_ALT, MOD_CONTROL, MOD_WIN] def waitFor(self, key, modifiers): # coerce to 0 if necessary modifiers = modifiers or 0 id = self.getNextId() hk = user32.RegisterHotKey(None, id, modifiers, key) print "register hotkey: ",hk if not hk: print "Unable to register hotkey for key ", key return False print "registered id", id try: msg = wintypes.MSG() while user32.GetMessageA(byref(msg), None, 0, 0) != 0: print "got message",msg.message,"which is not",win32con.WM_HOTKEY if msg.message == win32con.WM_HOTKEY: print "got hotkey" if msg.wParam == id: print "found proper hotkey" return True user32.TranslateMessage(byref(msg)) user32.DispatchMessageA(byref(msg)) finally: user32.UnregisterHotKey(None, id) return False SimpleKeyboardHook._id = 0
你一定要看看user32的SetWindowsHookEx。 这些功能允许您注册全局键盘挂钩。 (只要不要忘记通过调用CallNextHookEx来传递它们。)
链接: http : //msdn.microsoft.com/en-us/library/ms644990(v=vs.85).aspx
我不知道如何从Python做到这一点,对不起。
你有没有尝试在SourceForge上使用pyHook呢? 你可以查看DaniWeb的例子。