使用win32api向后台安卓模拟器发送鼠标滚轮上滚消息的实现问题
解决方案
鼠标滚动的核心逻辑
WM_MOUSEWHEEL消息的wParam参数为32位整数,分为两部分:
- 高16位:滚轮滚动增量,标准单位为
WHEEL_DELTA = 120,正值对应向上滚动,负值对应向下滚动 - 低16位:滚动时的按键状态,比如
win32con.MK_LBUTTON代表滚动时按住左键,不需要可传0
你之前的写法属于非标准写法,刚好匹配了模拟器向下滚动的触发逻辑,按标准逻辑调整即可实现向上滚动。
正确的滚动代码示例
向上滚动(坐标500,500位置)
# 滚动增量设为正120,左移16位到高16位,和按键状态做或运算 wParam = (120 << 16) | win32con.MK_LBUTTON lParam = win32api.MAKELONG(500, 500) win32api.PostMessage(hwnd, win32con.WM_MOUSEWHEEL, wParam, lParam)
向下滚动对照(同样坐标位置)
# 滚动增量设为负120 wParam = (-120 << 16) | win32con.MK_LBUTTON lParam = win32api.MAKELONG(500, 500) win32api.PostMessage(hwnd, win32con.WM_MOUSEWHEEL, wParam, lParam)
现有点击代码的优化建议
你当前的点击代码存在两个小问题,调整后可提高兼容性:
WM_LBUTTONUP的wParam参数不需要传MKF_LEFTBUTTONSEL,传0即可,部分模拟器对错误的wParam值不响应- 原代码最后一行
PostMessage没有缩进在Click函数内,会导致定义函数时直接执行一次点击
优化后的点击代码:
def Click(x, y): lParam = win32api.MAKELONG(x, y) win32api.PostMessage(hwnd, win32con.WM_MOUSEMOVE, 0, lParam) win32api.PostMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam) win32api.PostMessage(hwnd, win32con.WM_LBUTTONUP, 0, lParam)
内容的提问来源于stack exchange,提问作者Aleksandr Vandal
相关产品推荐
相关产品推荐

