Pyautogui不在游戏窗口工作

时间:2017-07-25 06:28:37

标签: python mouseevent pyautogui

我在游戏中使用Pyautogui进行了一些测试。 但是在那些改变光标和全屏游戏的游戏中,没有一种方法可以工作。

我现在正在尝试Ragnarok Online。

我试过了:

pyautogui.click()
pyautogui.moveTo(x, y, time)
pyautogui.moveRel(x, y)

在游戏窗口内,它们都不起作用。他们在外面工作得很好。

有没有办法让它发挥作用?还是我可以使用的另一个图书馆?

顺便说一下,win32api.SetCursorPos((x,y))也不起作用。

感谢。

1 个答案:

答案 0 :(得分:4)

Pyautogui

的源代码
def _sendMouseEvent(ev, x, y, dwData=0):
    assert x != None and y != None, 'x and y cannot be set to None'
    width, height = _size()
    convertedX = 65536 * x // width + 1
    convertedY = 65536 * y // height + 1
    ctypes.windll.user32.mouse_event(ev, ctypes.c_long(convertedX), ctypes.c_long(convertedY), dwData, 0)

这是一个在内部调用SendInput的win32API。

  

SendInput函数会将输入事件插入与硬件设备相同的队列中,但事件标记为可以通过挂钩检测到的LLMHF_INJECTED标记。要避免这个标志,你可能需要编写一个自定义驱动程序。

关于如何在DirectX游戏中模拟键盘有很多答案和问题,有人说可以,有些人说不能。而且,您可以尝试这个an answer which say could

但是在我看来,游戏必须使用directx接口与硬件进行通信以提高速度,然后SendInput仅将事件插入到消息队列中。并且您希望使用SendInput或{{1那么说,

  

没有问题无法通过另一个间接级别来解决

让我们为游戏添加一个消息队列。

如何? VMware等。已经完成了。