我在游戏中使用Pyautogui进行一些测试。但是在那些改变光标和全屏游戏的游戏中,没有一种方法可行。
我现在正在尝试Ragnarok Online。
我试过了:
pyautogui.click()
pyautogui.moveTo(x, y, time)
pyautogui.moveRel(x, y)
在游戏窗口内,它们都不起作用。他们外面工作得很好。
有没有办法让它发挥作用?还是我可以用的另一个图书馆?
顺便说一句,win32api.SetCursorPos((x,y))
也行不通。
谢谢。
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)
这是一个win32API,内部称为SendInput
。
SendInput
函数会将输入事件插入与硬件设备相同的队列中,但事件标记为可以通过挂钩检测到的LLMHF_INJECTED
标志。要避免这个标志,您可能需要编写自定义驱动程序。
关于如何在DirectX游戏中模拟键盘有很多答案和问题,有人说可以,有些人说不能。而且,你可以试试这个an answer which say could
但在我看来,游戏必须使用directx接口与硬件进行通信以获得速度,然后SendInput
只将事件插入到消息队列中。你想使用SendInput
或Mouse_Event
.So作为说法,
没有其他级别的间接无法解决的问题
让我们为游戏添加一个消息队列。
怎么样? VMware等。完成。