4

pyhookWindows XP マシンでキーストロークをマップするためにandを使用pyhkしていますが、アプリケーションにキーストローク (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

どんな助けでも感謝します。

ありがとう!

4

2 に答える 2

3

Windows のみに興味がある場合は、たとえば ctypes を介して win API を使用できます。

>>> 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

于 2012-08-02T19:57:54.623 に答える
0

私はここで完全に間違っているかもしれませんが、pyHook ドキュメントの私の理解から、キーの押下が別のアプリケーションに送信されるのを防ぐために、return Trueindef OnKeyboardEvent_up(event):OnKeyboardEvent(event,action=None,key='Z',context=None):to return False(またはTrue.

于 2013-01-03T02:40:25.003 に答える