PyHook没有检测到某些窗口中按下的按键

时间:2015-10-27 20:23:16

标签: python pyhook

我运行了这个PyHook示例代码:

Building native extensions.  This could take a while...
ERROR:  Error installing json:
ERROR: Failed to build gem native extension.

/usr/bin/ruby1.9.1 extconf.rb
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load     such file -- mkmf (LoadError)
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from extconf.rb:1:in `<main>'

尝试一下,它适用于大多数窗口,但是当我在游戏窗口中尝试它时,它就像我没有按任何东西。

有没有办法收听特定流程的按键?我该怎么办?

4 个答案:

答案 0 :(得分:1)

我从您获得此代码的同一页面引用。 Check Here.

  

如果您使用的是GUI工具包(例如wxPython),则此循环是不必要的,因为工具包提供了自己的工具包。

我认为您应该将pythoncom.PumpMessages()更改为其他我不知道的内容。

答案 1 :(得分:1)

尝试使用键盘代替,这是根据github上的键盘页面的示例。通过命令(在命令提示符下)sudo

,必须使用sudo python file.py运行它
import sys
sys.path.append('..')
import keyboard
def print_pressed_keys(e):
    line = ', '.join(str(code) for code in keyboard._pressed_events)
    # '\r' and end='' overwrites the previous line.
    # ' '*40 prints 40 spaces at the end to ensure the previous line is cleared.
    print('\r' + line + ' ' * 40k, end='')


keyboard.hook(print_pressed_keys)
keyboard.wait()

答案 2 :(得分:1)

您的问题可能是由于您的计算机将游戏优先于按键程序给您带来的,因此,当您按下按键时,输入内容将直接进入游戏而不是通过程序输入。

编辑:

实际上,有一种方法可以做到这一点。如果按ctrl+alt+del并选择task manager(Windows),则应该能够看到python程序的名称。现在,右键单击它,然后选择Go to details。这应该完全更改格式。无需单击其他任何内容,右键单击突出显示的内容(应以蓝色突出显示),然后将鼠标悬停在Set priority上。这应该会弹出一个下拉菜单,您可以在其中设置HighRealtime

确保执行此操作的另一种方法是,使用相同的步骤将游戏的优先级设置为Below Normal,但请单击游戏。

答案 3 :(得分:1)

游戏经常使用钩子来处理输入,与您尝试的方式几乎相同,钩子在Windows下的工作方式是链式的,IIRC最后添加的钩子是第一个被调用的钩子,因此,如果您在游戏开始之前就开始编写脚本,然后在您的游戏钩子之前调用游戏钩子,处理该事件,因此没有任何事情进入钩子。

另一种可能性是,为了防止人们编写脚本或使其自动执行游戏或进行其他有助于玩家游戏的事情,它将定期重新注册钩子,以确保钩子始终处于钩子链的顶端,如果是这种情况,则您会发现很难克服。