KeyPresser 一款自动化按键工具

131 阅读5分钟

1. 简介

  • KeyPresser 是一款自动化按键工具,它可以与窗口交互,并支持后台运行, 无需保持被控窗口在前台运行。用户可以选择要操作的目标窗口,并通过勾选复选框来控制要发送哪些按键消息。可以从组合框中选择所需的按键,并在编辑框中输入时间间隔以控制按键发送之间的延迟。程序提供“开始”和“停止”按钮来启动和终止按键发送过程。

2. 代码示例

2.1 选择目标窗口 获取窗口句柄

void KeyPresser::selectWindow() {
    SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, WinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);
    selectedWindowLabel->setText("请点击目标窗口...");
}

void CALLBACK KeyPresser::WinEventProc(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime) {
    if (event == EVENT_SYSTEM_FOREGROUND) {
        wchar_t windowTitle[256];
        GetWindowText(hwnd, windowTitle, 256);
        if (KeyPresser::instance) {
            KeyPresser::instance->targetHwnd = hwnd;
            KeyPresser::instance->selectedWindowLabel->setText(QString::fromWCharArray(windowTitle));
            UnhookWinEvent(hWinEventHook);
        }
    }
}

2.2 向目标窗口发送按键消息


void KeyPresser::pressKeys(int index) {
    if (targetHwnd) {
        int key = keyCombos[index]->currentData().toInt();

        DWORD dwVKFkeyData; // lParam 参数值
        WORD dwScanCode = MapVirtualKey(key, MAPVK_VK_TO_VSC); // 获取虚拟按键的键盘扫描码

        dwVKFkeyData = 1;
        dwVKFkeyData |= dwScanCode << 16;
        dwVKFkeyData |= 0 << 24;
        dwVKFkeyData |= 1 << 29;
        PostMessage(targetHwnd, WM_KEYDOWN, key, dwVKFkeyData);

        // 重置 dwVKFkeyData 以确保 WM_KEYUP 消息正确
        dwVKFkeyData = 1;
        dwVKFkeyData |= dwScanCode << 16;
        dwVKFkeyData |= 0 << 24;
        dwVKFkeyData |= 1 << 29;
        dwVKFkeyData |= 3 << 30;
        PostMessage(targetHwnd, WM_KEYUP, key, dwVKFkeyData);
    }
}

完整代码 gitcode.com/wang161019/…

3. KeyPresser更新日志

KeyPresser5.0.0版本

image.png

  • 架构升级,支持更多应用
  • keypresser添加 键盘仿真模式 选项
    image.png
    当前有三种模式,可根据实际情况选择合适的模式:
    1. 正常模式:即平常我们用的前台键盘模式
    2. Windows模式:采取模拟windows消息方式的后台模式
    3. DX模式:采用模拟dx后台键盘模式, windows后台模式不生效时可选择此模式
  • 鼠标助手添加 窗口屏幕获取方式 选项
    指定获取窗口截图的方式,可切换不同模式,并搭配“测试截图”按钮,测试是否能够成功获取窗口截图
    1. 正常模式:平常我们用的前台截屏模式
    2. GDI模式:用于窗口采用GDI方式刷新时. 此模式占用CPU较大
    3. GDI2模式:此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.
    4. DX模式:2d窗口的dx图色模式;3d窗口的dx图色模式,注意采用这个模式,必须关闭窗口3D视频设置的全屏抗锯齿选项.
    5. DX2模式:用于窗口采用dx模式刷新,如果dx方式会出现窗口进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7或者vista不需要移动也可后台. 此模式占用CPU较大.
    6. DX3模式:同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大
  • 鼠标助手添加 鼠标仿真方式 选项
    image.png转存
    • 正常模式:即平常我们用的前台鼠标模式。
    • DX模式:采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入
    • DX2模式:这种方式类似于dx模式,但是不会锁定外部鼠标输入
    • Windows模式:采取模拟windows消息方式的后台模式
    • Windows2模式:采取模拟windows消息方式(锁定鼠标位置)
    • Windows3模式:采取模拟windows消息方式,可以支持有多个子窗口的窗口后台

KeyPresser 4.2.0版本

  • 添加“定时任务”支持
    KeyPresser 4.2.0

KeyPresser 4.1.1版本

  • 修复鼠标助手bug

KeyPresser 4.1.0版本

  • 内置的鼠标助手升级,更新点击位置为图片识别

KeyPresser3.2.7版本

  • 进一步修复 停止后 还发送按键消息的问题

KeyPresser3.2.6版本

  • 修复“停止”后,按键消息&窗口置顶还持续生效的问题

KeyPresser3.2.5 版本

  • 修复keypresser和MouseAssistant快捷键相关bug

KeyPresser3.2.3版本

  • 修复部分bug, 添加导入导出设置,分享设置更轻松
  • 安装包自动安装VC++运行时,解决部分用户缺少VC++运行库的问题
  • KeyPresser3.2.3

KeyPresser3.2版本

  • 将“鼠标助手”内置,无需额外授权鼠标助手

KeyPresser3.1版本

  • 布局调整 keypresser3.1

KeyPresser3.0版本

  • 界面焕新 全新体验 KeyPresser3.0

KeyPresser2.22

  1. 新增“更多按键”
  • 点击“更多按键”即可显示更多自定义按键,满足更多自定义要求!不需要时,可点击“收起按键”;
  1. 开始/停止快捷键添加更多选项
  • 开始/停止快捷键添加更多选项,但注意不要与自定义按键冲突

image-20250308122759152

KeyPresser2.2

  • 新增鼠标助手
    image-20250419221751293

KeyPresser2.0来袭

image-20241011211737439.png

①添加“突显所选窗口”按钮

  • 点击该按钮后,将把所选窗口显示到最上层并闪烁。
  • 通过该按钮即可解决在启动多个keyPresser时,快速找到所选窗口。

②改变固定时间间隔为在指定范围内随机

  • 在输入框中分别输入最小值和最大值
  • 最小值最大值相同时,既为固定时间间隔发送按键消息
  • 不同时,则在每次发送按键消息后会随机时间间隔发送按键消息,随机时间间隔介于最小与最大值之间

KeyPresser1.0版本

  • 1.0下载链接已隐藏,请下载2.0版本!

4. 使用教程

KeyPresser界面

步骤一:选择窗口

  • 点击“选择窗口”按钮后,根据提示点击目标窗口(例如您的游戏窗口)!

选择窗口

  • 点击“凸显所选窗口”,将会闪烁目标窗口!可用于多开KeyPresser时,便于区分目标窗口!

步骤二:模式选择

模式选择

  • 当前有两种模式:
    1. 独立触发:勾选的按键独立计算时间间隔,独立触发!
    2. 顺序触发:勾选的按键需在上一按键触发后,再计算时间间隔后触发!

步骤三:勾选和自定义按键

自定义按键

  • 时间间隔最小值、最大值相同时,将以固定的时间间隔触发
  • 时间间隔最小值、最大值不同时,将在最小、最大值之间生成随机时间间隔触发

步骤四:开始、结束

开始/结束

  • 点击“开始”,或按下快捷键,即可发送按键消息
  • 点击“停止”,或按下快捷键,即可停止发送按键消息

5. 新版本持续更新

  • 点赞、收藏,不迷路!