问题描述
我正在使用Pyautogui在游戏上进行一些测试.但是在那些会更改光标和全屏游戏的游戏中,没有一种方法有效.
I'm making some tests using Pyautogui on games.But in those games that change your cursor and fullscreen games, none of the methods work.
我现在正在网上尝试《仙境传说》.
I'm trying now on Ragnarok Online.
我尝试过:
pyautogui.click()
pyautogui.moveTo(x, y, time)
pyautogui.moveRel(x, y)
在游戏窗口中时,它们都不起作用.他们在外面工作正常.
None of them works when inside the game window. They work fine outside.
有没有办法使它起作用?还是我可以使用的另一个库?
Is there a way to make it work? Or another library that I could use?
顺便说一句,win32api.SetCursorPos((x,y))
也不起作用.
By the way, win32api.SetCursorPos((x,y))
also doesn't work.
谢谢.
推荐答案
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
.
and it's a win32API which called SendInput
internally.
关于如何在DirectX游戏中模拟键盘有很多答案和问题,有人说可以,有人说不能.而且,您可以尝试一个可以回答的答案
There are plenty of answer and question about how to simulate keyboard in DirectX game which some say could and some say could not. And, you may try this an answer which say could
,但我认为游戏必须使用Directx接口与硬件进行通信以提高速度,然后SendInput
仅将事件插入消息队列中.而您想使用SendInput
或Mouse_Event
.说,
but in my opinion,must game use directx interface to communicate with the hardware for speed,then the SendInput
only insert events into the message queue.and you want to use SendInput
or Mouse_Event
.So as the saying,
让我们为游戏添加一个消息队列.
let's add a message queue for the game.
如何? VMware.完成了.
How? VMware. It's done.
这篇关于Pyautogui在游戏窗口中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!