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. 向目标窗口发送按键消息
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);
}
}
3. 成品展示

简介
- KeyPresser 是一款免费的自动化按键工具,它可以与窗口交互,并支持后台运行, 无需保持被控窗口在前台运行。用户可以选择要操作的目标窗口,并通过勾选复选框来控制要发送哪些按键消息。可以从组合框中选择所需的按键,并在编辑框中输入时间间隔以控制按键发送之间的延迟。程序提供“开始”和“停止”按钮来启动和终止按键发送过程。
成品下载
- https://www.progdomain.com/627/
- csdn渠道下载 https://download.csdn.net/download/wang161019/89927497
完整源代码下载
https://github.com/wang161113/KeyPresser
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了