C++实现windows自动化按键

news/2024/12/20 16:20:36/文章来源:https://www.cnblogs.com/Gale-Tech/p/18619511

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; // 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);}
}

3. 成品展示

image.png

简介

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

成品下载

  1. https://www.progdomain.com/627/
  2. csdn渠道下载 https://download.csdn.net/download/wang161019/89927497

完整源代码下载

https://github.com/wang161113/KeyPresser

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855902.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言的头文件包含,竟存在这么多知识点!

文章来自:https://zhuanlan.zhihu.com/p/472808057 很多事不深入以为自己懂了,但真正用到项目上,才会发现其中的问题。曾以为自己写C语言已经轻车熟路了,特别是对软件文件的工程管理上,因为心里对自己的代码编写风格还是有自信的。 本人曾经认为,一个.c文件对应一个.h文件…

OpenApi 下达指令

Completions模型将字符串作为输入,模型将返回一个或多个预测的完成项。大多数开发者应该使用的 chatCompletions API 来使用OpenAI最好和最新的模型。大部分支持传统Completions端点的模型将在2024年1月4日停止服务Chat Completions APl Chat Completions服务是一种特定的Comp…

昇腾MindSpeed-LLM全流程实践及踩坑记录

目录昇腾MindSpeed-LLM全流程实践及踩坑记录1、 MindSpeed-LLM简介1.1 MindSpeed简介1.2MindSpeed-LLM核心功能1.3 业界主流加速库对比2、全流程实践2.1 环境搭建流程正式开始前必看前置:所以,一、直接在mcore下进行全流程操作;二、不要按照主页readme上的脚本执行任务指令,…

Go调试运行时出现 Failed to launch:could not launch process:not an executable file 错误

在调试运行时,点击 Start Debugging 时出现 这个问题是当前打开的文件中没有 main() 函数 所以 当 点击 Start Debugging 时,要选择打开 当前页有 main() 函数的文件 例

Origin绘图教程 | 第一张绘图从这里开始

主要内容:生成数据+绘图图形+简单美化+保存项目 生成数据并绘图 1. 打开Origin。默认会打开一个空白的工作簿,其中包含一个两列的工作表。 2. 右键单击A列,在弹出菜单中选择填充列: 一组数字...(若菜单列表被折叠,你需要展开整个右键菜单来找到这个选项——可做如下设置关…

Go使用zap和lumberjack库,实现每小时间轮转日志文件

创建一个文件夹,命名为 loggerDemo 打开这个文件夹 打开终端,点击左下角 叉和感叹号 在弹出的窗口中点击 TERMINAL 进入终端(也可以使用快捷键 CTRL+` 直接打开)初始化 Go 的 Modulego mod init loggerDemo点击文件创建图标创建文件 创建一个名为 main.go 的文件 ,按下 …

Goby自定义编写EXP入门篇:编写模板基础使用讲解

众所周知,Goby可以利用便捷的Json图形化编写PoC/EXP,但由于Goby的PoC/EXP基于Go代码,所以很多新手同学可能不太理解其中的变量和代码逻辑,为此,我们将开展从入门到精通的系列教程,为大家详细讲解如何使用Goby的JSON图形化界面进行漏洞编写。 入门篇:Goby Poc模板架构讲解…

SOLIDWORKS快捷键命令大全

SOLIDWORKS是一款广泛应用于工程设计、产品开发及机械制造领域的三维计算机辅助设计(CAD)软件。它以其直观的用户界面、强大的设计功能,成为了深受专业设计师喜爱的设计工具。想要在SOLIDWORKS中以更高的效率绘图,掌握一些快捷键,会让你的设计工作更加得心应手! 我们一起…

让AI碰撞!“天翼云息壤杯”高校AI大赛江苏赛区交流会热力开场!

由中国电信集团有限公司主办,天翼云科技有限公司承办的“天翼云息壤杯”高校AI大赛正在火热进行中。为了提高江苏赛区学生的参赛热情,增强学生的创作能力,江苏电信、天翼云华东中心于12月6日在南京联合举办了主题为“共筑教育新生态,息壤智汇新征程”的AI大赛交流分享会。由…

Parquet存储概述及读写时效对比

1. Parquet简介 Parquet是一种开放的列式存储格式,旨在提高大数据处理和分析的效率。 Parquet由Twitter和Cloudera合作开发,并于2015年5月从Apache的孵化器项目毕业,成为Apache的顶级项目。 Parquet旨在高效存储和处理大规模数据集,广泛应用于Hadoop、Spark等大数据生态系统…

“息 壤” 升 级 !

12月3日,以“AI赋能 共筑数字新生态”为主题的2024数字科技生态大会在广州召开。主论坛上,中国电信集团有限公司总经理助理,天翼云科技有限公司董事长、总经理胡志强对“息壤”一体化智算平台的最新升级和应用进行了介绍。通过在算网调度、智算服务、智算生态三个方面的大规…

AI智能分析视频分析网关关于监控摄像头数据量对云存储服务影响的探讨

在数字化安防监控领域,监控摄像头数据量的激增对云存储服务带来了前所未有的挑战与机遇。随着技术的不断进步和监控需求的日益增长,监控摄像头所产生的数据量正以前所未有的速度增长,这对云存储服务的性能、容量及可靠性提出了更高要求。本文将深入探讨监控摄像头数据量对云…