You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:54:04