我正在使用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
任何帮助赞赏.
谢谢!
最佳答案 如果您只对Windows感兴趣,可以使用win API,例如通过ctypes:
>>> from ctypes import windll
>>> windll.user32.RegisterHotKey(0, -1, 0x0002, 0x5a)
运行这些代码行后,Ctrl(代码= 0x0002)Z(代码= 0x5a)组合在Python REPL中不再起作用.
所以你应该更好地看一下这些热键注册的窗口.您可以在MSDN中找到更多信息:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309(v=vs.85).aspx