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. 新版本持续更新

  • 点赞、收藏,不迷路!
相关推荐
电商API_1800790524718 小时前
企业ERP进销存场景|京东商品详情接口自动同步方案|凭证鉴权批量调用技术实操
大数据·运维·人工智能·爬虫·数据挖掘·网络爬虫
张小姐的猫18 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
xexpertS18 小时前
分布式系统过载治理:如何通过较小服务控制请求节奏
微服务·自动化
小稻穗18 小时前
市场调研样本选型坐标系:2026六家国内样本平台能力横向校验
大数据·运维·数据分析
AOwhisky19 小时前
Python 学习笔记(第十三期)——运维自动化(下·前篇):远程命令执行——paramiko基础篇
运维·python·学习·云原生·自动化·运维开发·paramiko
AOwhisky19 小时前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko
imc.1120 小时前
linux基础IO
linux·运维·服务器
躺不平的理查德20 小时前
让Ubuntu 的第二块网卡 ens37 永久固定为 192.168.30.111
运维·服务器
慧都小妮子20 小时前
ThingsBoard PE 智慧能源:打造企业数字化能源管理平台
运维·物联网·能源·数据采集·数据可视化·thingsboard·制造业数字化
bitbrowser20 小时前
Facebook 验证反复回到原页面,应该从哪里排查
运维·服务器·facebook