Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Windows上,如何安装最低级别的全局键盘挂钩?_Python_Windows_Hook - Fatal编程技术网

Python 在Windows上,如何安装最低级别的全局键盘挂钩?

Python 在Windows上,如何安装最低级别的全局键盘挂钩?,python,windows,hook,Python,Windows,Hook,我正在用python在Windows上开发一个自定义arcade启动器。我想选择系统和游戏,然后启动模拟器-并需要特定的组合键来杀死模拟器。当使用随机应用程序进行测试时,我所有的键挂钩都可以工作,但当我实际启动模拟器(例如Nestopia)时,我的键挂钩无法启动。我目前正在使用RegisterHotKey,它获取事件,但不获取热键。有人知道如何在Nestopia之前安装一个足够低的东西来真正获得活动吗?这是我的密码: import ctypes import win32con from ctyp

我正在用python在Windows上开发一个自定义arcade启动器。我想选择系统和游戏,然后启动模拟器-并需要特定的组合键来杀死模拟器。当使用随机应用程序进行测试时,我所有的键挂钩都可以工作,但当我实际启动模拟器(例如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传递信息。)

链接:


不过,我不知道如何从python中实现这一点,对不起。

您尝试过在SourceForge上使用over吗?您可以查看示例用法。

我也尝试过-它似乎与热键有相同的问题:(这不是python,但可能有助于您搜索: