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;
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 = 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版本

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

KeyPresser 4.1.1版本
KeyPresser 4.1.0版本
KeyPresser3.2.7版本
KeyPresser3.2.6版本
- 修复“停止”后,按键消息&窗口置顶还持续生效的问题
KeyPresser3.2.5 版本
- 修复keypresser和MouseAssistant快捷键相关bug
KeyPresser3.2.3版本
- 修复部分bug, 添加导入导出设置,分享设置更轻松
- 安装包自动安装VC++运行时,解决部分用户缺少VC++运行库的问题

KeyPresser3.2版本
- 将“鼠标助手”内置,无需额外授权

KeyPresser3.1版本
- 布局调整

KeyPresser3.0版本
- 界面焕新 全新体验

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

KeyPresser2.2
- 新增鼠标助手

KeyPresser2.0来袭

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

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

- 点击“凸显所选窗口”,将会闪烁目标窗口!可用于多开KeyPresser时,便于区分目标窗口!
步骤二:模式选择

- 当前有两种模式:
- 独立触发:勾选的按键独立计算时间间隔,独立触发!
- 顺序触发:勾选的按键需在上一按键触发后,再计算时间间隔后触发!
步骤三:勾选和自定义按键

- 时间间隔最小值、最大值相同时,将以固定的时间间隔触发
- 时间间隔最小值、最大值不同时,将在最小、最大值之间生成随机时间间隔触发
步骤四:开始、结束

- 点击“开始”,或按下快捷键,即可发送按键消息
- 点击“停止”,或按下快捷键,即可停止发送按键消息
5. 新版本持续更新