V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhuxs
V2EX  ›  游戏

怎么在 CS2 内实现鼠标的移动?

  •  
  •   zhuxs · 28 天前 · 585 次点击

    最近在研究 AI 玩 CS2 ,模型训练完毕后测试效果,遇到比较奇葩的情况: Python 几个模拟输入的库均可操作键盘按键、鼠标单击事件,唯独不支持鼠标的移动。(为什么不一起禁用了?) 翻了几个仓库,知道可行的方案是:Andunio 开发板输入、罗技驱动、Kmclass 。目前正在使用罗技驱动,但是有个问题,在移动的过程中,鼠标位置会被重置为(960,540)屏幕中心点,移动到目标点,需要分 3 次移动,速度太慢了。kmclass 驱动因为 ASUS 死活不给关 Security Boot ,W 用不了,而且还不清楚是否支持最新 W10 想问还有没有比较成熟的方案,这些太鸡肋。

    14 条回复    2024-05-31 21:07:54 +08:00
    codehz
        1
    codehz  
       28 天前
    cs2 用 direct input 的吧,不然没法屏蔽系统层面的鼠标加速()
    另外你搞这个不怕封号的吗,还是说不进 vac 服单纯测试效果?
    CSGO
        2
    CSGO  
       28 天前
    @codehz 题外话:如果我开外挂,自己本地开游戏会被 VAC 吗?以及开了外挂,再进入 VAC 服务器前关闭,也不会 VAC ?
    zhuxs
        3
    zhuxs  
    OP
       28 天前
    @codehz 我想做的是一个基于计算机视觉的 DQL 强化学习 AI ,CS2 好像暂时不支持 RAW Input ,G Hub 用的也好鸡肋
    nipvc
        4
    nipvc  
       27 天前 via iPhone
    目前正在使用罗技驱动,但是有个问题,在移动的过程中,鼠标位置会被重置为(960,540)屏幕中心点,移动到目标点,需要分 3 次移动,速度太慢了。

    移动到目标点为啥要三次移动?移动到目标点指什么?
    cs2 鼠标用的 rawinput 接口
    nipvc
        5
    nipvc  
       27 天前 via iPhone
    模拟输入不是直接用 sendinput 就好了?
    zhuxs
        6
    zhuxs  
    OP
       27 天前
    @nipvc 不行啊,用了没有反应:
    ```
    SendInput = ctypes.windll.user32.SendInput
    def set_pos(x, y):
    x = 1 + int(x * 65536./1920.)
    y = 1 + int(y * 65536./1080.)
    extra = ctypes.c_ulong(0)
    ii_ = pynput._util.win32.INPUT_union()
    ii_.mi = pynput._util.win32.MOUSEINPUT(x, y, 0, (0x0001 | 0x8000), 0, ctypes.cast(ctypes.pointer(extra), ctypes.c_void_p))
    command=pynput._util.win32.INPUT(ctypes.c_ulong(0), ii_)
    SendInput(1, ctypes.pointer(command), ctypes.sizeof(command))
    ```
    至于罗技是这样的:
    从当前位置(x1,y1) 移动到 目标位置(x2,y2)的过程中游戏会重置准星位置为(960,540),重置后鼠标就动不了,需要再次计算位置。
    zhuxs
        7
    zhuxs  
    OP
       27 天前
    我买了个 CH9329 模块,用 python 给串口发型号看看可行性如何
    zhuxs
        8
    zhuxs  
    OP
       27 天前
    罗技完整代码:
    ```
    dll_path = os.path.join("..", "驱动", "ghub_device.dll")
    global gmok, gm # Access global variables
    try:
    gm = CDLL(dll_path)
    gmok = gm.device_open() == 1
    if not gmok:
    print('未安装 ghub 或者 lgs 驱动!!!')
    exit();
    print('初始化成功!')

    except FileNotFoundError:
    print('缺少文件')

    # 鼠标移动
    def mouse_xy(x, y, abs_move = False):
    if gmok:
    gm.moveR(int(x), int(y), abs_move)
    ```
    nipvc
        9
    nipvc  
       27 天前 via iPhone
    @zhuxs dwFlags 错了
    nipvc
        10
    nipvc  
       27 天前 via iPhone
    cs2 写着不支持手柄,手柄能操作 cs2 ,用的 SendInput 接口
    zhuxs
        11
    zhuxs  
    OP
       27 天前 via Android
    @nipvc SendInput 相信是可以完成按键输入的,但是对于 Mouse move 我怎么改都无法成功让视角变动一下🙃
    nipvc
        12
    nipvc  
       26 天前 via iPhone
    @zhuxs 上面说了,你的示例 dwFlags 写错了,不要 8 ,只要 0 ,再改下 dx 和 dy
    nipvc
        13
    nipvc  
       26 天前 via iPhone
    @nipvc 说错了,只要 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1161 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:29 · PVG 02:29 · LAX 11:29 · JFK 14:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.