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

如何用Python控制MSI App Player鼠标自动点击?点击失效问题求助

解决MSI App Player中PyDirectInput点击无响应的问题

核心原因

MSI App Player基于VirtualBox/BlueStacks内核,其沙箱环境会拦截部分Windows标准输入模拟API,PyDirectInput默认的SendInput调用可能无法穿透到模拟器内部,导致点击动作无效但无报错。

可行解决方案

1. 切换PyDirectInput的输入模式

改用更底层的mouse_eventAPI替代默认的SendInput,在代码开头添加配置:

pyd.FAILSAFE = False
pyd.PAUSE = 0
pyd.use_mouse_event()  # 切换到兼容性更好的输入模式

2. 强制激活模拟器窗口

点击前确保模拟器处于前台焦点,避免输入被其他窗口拦截:

import pyautogui as pi

# 获取模拟器窗口(标题需匹配你的MSI App Player窗口名称)
simulator_window = pi.getWindowsWithTitle("MSI App Player")[0]
simulator_window.activate()
time.sleep(0.2)  # 给窗口焦点切换预留时间

将这段逻辑加到每个点击函数的开头。

3. 修正坐标偏移问题

模拟器窗口可能存在边框或缩放,需将相对坐标转换为屏幕绝对坐标:

def get_absolute_coords(window, rel_x, rel_y):
    # rel_x/rel_y为窗口内相对坐标(0-1范围)
    left, top, width, height = window.left, window.top, window.width, window.height
    return left + int(width * rel_x), top + int(height * rel_y)

调用时先转换坐标再执行点击:

abs_x, abs_y = get_absolute_coords(simulator_window, 0.6, 0.8)
pyd.moveTo(abs_x, abs_y)

4. 尝试组合按键触发点击

部分模拟器对单一点击无响应,可尝试绑定辅助按键:

pyd.keyDown('ctrl')
pyd.click()
pyd.keyUp('ctrl')

也可替换为shift等其他按键测试。

5. 切换到pyautogui原生点击

若PyDirectInput仍无效,改用pyautogui的点击函数并配置参数:

pi.click(x, y, clicks=1, interval=0.04, button='left')

同时关闭pyautogui的安全防护:

pi.FAILSAFE = False

调整后的完整代码示例

import pyautogui as pi
import time
import pydirectinput as pyd

# 初始化配置
pyd.FAILSAFE = False
pyd.PAUSE = 0
pyd.use_mouse_event()
pi.FAILSAFE = False

def get_absolute_coords(window, rel_x, rel_y):
    left, top, width, height = window.left, window.top, window.width, window.height
    return left + int(width * rel_x), top + int(height * rel_y)

def click_shit(window, rel_x, rel_y):
    window.activate()
    time.sleep(0.2)
    abs_x, abs_y = get_absolute_coords(window, rel_x, rel_y)
    pyd.moveTo(abs_x, abs_y)
    for _ in range(200):
        pyd.click()
        time.sleep(0.04)
  
def click_reload(window, rel_x1, rel_y1, rel_x2, rel_y2):
    window.activate()
    time.sleep(0.2)
    abs_x1, abs_y1 = get_absolute_coords(window, rel_x1, rel_y1)
    pyd.moveTo(abs_x1, abs_y1)
    pyd.click()
    time.sleep(0.5)
    abs_x2, abs_y2 = get_absolute_coords(window, rel_x2, rel_y2)
    pyd.moveTo(abs_x2, abs_y2)
    pyd.click()  

if __name__ == "__main__":
    # 替换为你的模拟器窗口标题
    simulator_window = pi.getWindowsWithTitle("MSI App Player")[0]
    # 替换为窗口内的相对坐标(0-1范围)
    click_x, click_y = 0.6, 0.8
    reload_x1, reload_y1 = 0.1, 0.9
    reload_x2, reload_y2 = 0.2, 0.9
    
    while True:
         click_shit(simulator_window, click_x, click_y)
         time.sleep(3)
         click_reload(simulator_window, reload_x1, reload_y1, reload_x2, reload_y2)
         time.sleep(1)

内容的提问来源于stack exchange,提问作者jie code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:45:19