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

如何使用编程语言模拟键鼠输入 解决游戏拦截模拟输入问题

问题背景

常规键鼠模拟方案在记事本等普通桌面程序中可正常运行,但在特定带反作弊的游戏中完全失效,本质原因是这类游戏会过滤用户态API生成的、带注入标记的模拟输入信号。目前已验证无效的两种实现如下:

  1. C++ 调用SendInput实现
#include <future>
#include<Windows.h>
using namespace std::chrono;
using namespace std::this_thread;
using namespace std;

UINT PressKeyScan(WORD scanCode)
{
    INPUT input[1] = { 0 };
    input[0].type = INPUT_KEYBOARD;
    input[0].ki.wVk = NULL;
    input[0].ki.wScan = scanCode;
    input[0].ki.dwFlags = KEYEVENTF_SCANCODE ;

    UINT ret = SendInput(1, input, sizeof(INPUT));

    return ret;
}

UINT ReleaseKeyScan(WORD scanCode)
{
    INPUT input[1] = { 0 };
    input[0].type = INPUT_KEYBOARD;
    input[0].ki.wVk = NULL;
    input[0].ki.wScan = scanCode;
    input[0].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;


    UINT ret = SendInput(1, input, sizeof(INPUT));

    return ret;
}
int main()
{
    for (size_t i = 0; i < 100; i++)
    {
        PressKeyScan(0x39);
        sleep_for(milliseconds(100));
        ReleaseKeyScan(0x39);
        sleep_for(milliseconds(100));
    }
    
}
  1. C# WinForms 调用SendKeys实现
private void btnSendKeys_Click(object sender, EventArgs e)
{
    int iHandle = NativeWin32.FindWindow(null, txtTitle.Text);
    
    NativeWin32.SetForegroundWindow(iHandle);
    
    string keys = "";
    string space = " ";
    

    for (int i = 0; i < lbKeys.Items.Count; i++)
    {
        if (lbKeys.Items[i].Text.ToString() == "{SPACE}")
        {
            keys += space;
        }
        else
        {
            keys += lbKeys.Items[i].Text.ToString();
        }
    }

    System.Windows.Forms.SendKeys.Send(keys);
    
}
可绕过拦截的实现方案

你之前用的SendInput、SendKeys以及更早的keybd_event、窗口消息发送方案,都属于用户态输入接口,生成的输入事件会携带LLMHF_INJECTED标记,几乎所有带反作弊的游戏都会直接过滤这类事件,完全不会传入游戏的输入处理逻辑。可落地的绕过方案按稳定性从高到低排序如下:

  • 硬件级模拟
    用Arduino、CH552等单片机开发板,刷入自定义HID固件,模拟成真实的USB键鼠外设接入电脑,直接从硬件层面发送输入报文。这种方案生成的输入和手动按实体键盘鼠标的信号完全一致,所有软件层面的输入检测都无法区分,不存在被识别为模拟输入的可能,是最稳妥的方案,唯一缺点是需要额外采购硬件。
  • 虚拟HID驱动级模拟
    在系统内核层虚拟一个HID键鼠设备,通过虚拟设备向系统输入栈上报输入事件,这类事件不会携带用户态注入标记,反作弊很难和真实硬件输入区分。优先选择成熟开源的虚拟HID框架实现,不要使用来源不明的钩子类驱动,避免被反作弊判定为恶意程序。
    注意不要用固定间隔的输入逻辑,你代码里写死100ms按键间隔、100ms抬起间隔的行为特征非常明显,就算输入本身过了标记检测,也会被行为检测识别为脚本。
  • 游戏进程内Hook输入接口
    逆向分析目标游戏的输入处理逻辑,找到游戏读取输入的接口(常见的是DirectInput接口、RawInput回调、Unity/Unreal引擎的内置输入模块),将代码注入到游戏进程内部,直接写入按键状态,完全绕开系统层面的输入栈。这种方案不需要驱动,但通用性差,每次游戏更新后接口偏移可能变化,需要重新逆向适配,同时注入行为本身需要过反作弊的进程注入检测。

注意:所有输入模拟方案都存在被游戏反作弊判定为违规的风险,正式使用前请先用非核心账号测试,避免账号被封禁。不要尝试用更老的用户态API碰运气,这类接口的特征比SendInput更明显,不仅无效还可能直接触发反作弊告警。

内容的提问来源于stack exchange,提问作者Osama Adel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:36:24