【发布时间】:2012-07-24 09:54:15
【问题描述】:
我正在使用pyhook 和pyhk 在Windows XP 机器上映射击键,它工作正常,除非击键(例如,ctrl+z)已经存在于应用程序中。在这种情况下,ctrl+z 传递给应用程序并触发已映射到它的操作。
如果您熟悉autohotkey,请注意autohotkey 通过定义可以选择传递给底层应用程序的热键来解决这个问题。这里有一些代码可以理解这个想法。请注意,我正在尝试跟踪 ctrl 键何时按下。
import pythoncom, pyHook
control_down = False
def OnKeyboardEvent_up(event):
global control_down
if event.Key=='Lcontrol' or event.Key=='Rcontrol':
control_down=False
return True
def OnKeyboardEvent(event,action=None,key='Z',context=None):
global control_down
if event.Key=='Lcontrol' or event.Key=='Rcontrol':
control_down=True
if control_down and event.Key==key:
print 'do something'
return False
if event.Key=='Pause':
win32gui.PostQuitMessage(1)
return False
# return True to pass the event to other handlers
return True
if __name__ == '__main__':
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.KeyUp = OnKeyboardEvent_up
hm.HookKeyboard() # set the hook
pythoncom.PumpMessages() # wait forever
任何帮助表示赞赏。
谢谢!
【问题讨论】:
-
遗憾的是(跨平台)热键支持目前在 Python 中非常糟糕。 高级(咳嗽)之类的东西非常难。我正在考虑尽快为此编写自己的包。
标签: python windows keyboard keyboard-shortcuts pyhook