问题
在使用自己写的 Python开发游戏自动化后台脚本过程中,发现其对安卓模拟器这种Qt5QWindowIcon类名的窗口不起作用,下面是解决办法
过程
首先通过spy++确定了需要发送消息的窗口不是最上层的Qt5QWindowIcon类,而是第四级RenderWindowWindow,Qt5QWindowIcon这一窗口
其次通过监视其鼠标消息,发现实际用鼠标点击的消息队列如下:
并且需要注意的是在WM_LBUTTONDOWN这条消息中,fwKeys参数为MK_LBUTTON,而原代码中没有考虑这一参数,直接设置0.
在进一步的验证过程中,发现只要涵盖最后三条消息即可成功。
解决
首先修改原左键按下函数:
def __left_down(self, handle: HWND, x: int, y: int):
"""在坐标(x, y)按下鼠标左键
Args:
handle (HWND): 窗口句柄
x (int): 横坐标
y (int): 纵坐标
"""
# https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-lbuttondown
wparam = 0x001 # MK_LBUTTON
lparam = y << 16 | x
self.__PostMessageW(handle, self.__WM_LBUTTONDOWN, wparam, lparam)
补充参数:
__SendMessageW = windll.user32.SendMessageW
__WM_SETCURSOR

在使用Python开发游戏自动化后台脚本时,遇到对Qt5QWindowIcon类窗口发送鼠标消息无效的情况。通过Spy++确定目标窗口为RenderWindowWindow,Qt5QWindowIcon,并发现WM_LBUTTONDOWN消息的fwKeys参数需设置为MK_LBUTTON。解决方案包括修改左键按下函数,补充WM_SETCURSOR和WM_MOUSEACTIVATE消息,以及实现相关函数来激活窗口并设置鼠标状态,从而成功发送鼠标点击消息。
最低0.47元/天 解锁文章
1万+





