KeyPresser 一款自动化按键工具

1. 简介

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

2. 代码示例

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

cpp 复制代码
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 向目标窗口发送按键消息

cpp 复制代码
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);
    }
}

完整代码
https://gitcode.com/wang161019/KeyPresser/

3. KeyPresser更新日志

KeyPresser3.2.5 版本

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

KeyPresser3.2.3版本

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

KeyPresser3.2版本

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

KeyPresser3.1版本

  • 布局调整

KeyPresser3.0版本

  • 界面焕新 全新体验

KeyPresser2.22

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

KeyPresser2.2

  • 新增鼠标助手

KeyPresser2.0来袭

①添加"突显所选窗口"按钮
  • 点击该按钮后,将把所选窗口显示到最上层并闪烁。
  • 通过该按钮即可解决在启动多个keyPresser时,快速找到所选窗口。
②改变固定时间间隔为在指定范围内随机
  • 在输入框中分别输入最小值和最大值
  • 最小值最大值相同时,既为固定时间间隔发送按键消息
  • 不同时,则在每次发送按键消息后会随机时间间隔发送按键消息,随机时间间隔介于最小与最大值之间

KeyPresser1.0版本

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

4. 使用教程

步骤一:选择窗口

  • 点击"选择窗口"按钮后,根据提示点击目标窗口(例如您的游戏窗口)!
  • 点击"凸显所选窗口",将会闪烁目标窗口!可用于多开KeyPresser时,便于区分目标窗口!

步骤二:模式选择

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

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

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

步骤四:开始、结束

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

5. 新版本持续更新

  • 点赞、收藏,不迷路!
相关推荐
坚持就完事了2 小时前
scp命令
linux·运维·服务器
ALex_zry2 小时前
Builder模式在BUFR数据组装中的实践
运维·服务器·建造者模式
weixin_463449782 小时前
智媒时代,如何借力权威发声?——探秘官媒发布系统的变革力量
人工智能·自动化
老实巴交的麻匪2 小时前
Exception异常架构设计:系统性异常处理的思维革命(05)
运维·云原生·架构
爱学习的小囧2 小时前
VMware NSX-T Data Center 3.2.3.0 部署后账号密码获取及登录配置教程
linux·运维·服务器·网络·数据库·esxi
喵了几个咪3 小时前
MySQL 运维实战:ibd 文件批量转换为 SQL 完整指南(基于 ibd2sql)
运维·sql·mysql
bukeyiwanshui3 小时前
20260417 NFS服务器
linux·运维·服务器
wzl202612133 小时前
企微关键词拉群之批量自动化与风控规避方案
运维·自动化·企业微信
Gofarlic_oms13 小时前
制定企业Citrix虚拟化软件资产管理政策框架
运维·服务器·开发语言·matlab·负载均衡