windows实现自动化按键

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

成品下载

https://www.progdomain.com/627/

完整源代码下载

https://download.csdn.net/download/wang161019/89547020

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在 Windows 上开发.NET MAUI 应用_1.安装开发环境

开发跨平台的本机 .NET Multi-platform App UI (.NET MAUI) 应用需要 Visual Studio 2022 17.8 或更高版本&#xff0c;或者具有 .NET MAUI 扩展的最新 Visual Studio Code。要开始在 Windows 上开发本机跨平台 .NET MAUI 应用&#xff0c;请按照安装步骤安装 Visual Studio 20…

Modbus转Ethernet/IP网关模块与汇川PLC通讯案例

Modbus转Ethernet/IP网关模块&#xff08;XD-MDEP100&#xff09;是一种用于将Modbus协议转换为Ethernet/IP协议的设备。它可以将Modbus RTU和Modbus TCP两种不同格式的Modbus数据包转换为Ethernet/IP协议的数据包&#xff0c;实现不同厂家的设备之间的数据交换和共享。在汇川P…

【AI技术揭秘】一键锐化图像,让您的照片立即变身高清大片!

一键锐化图像 1. 概述1.1 图像锐化的概念及重要性1.2 利用人工智能实现图像锐化的基本原理 2. 常用图像锐化算法简介2.1 Sobel算子2.2 Laplacian算子2.3 Unsharp Masking算法2.4 High Boost Filtering算法2.5 算法原理及实际应用效果 3. 基于深度学习的图像锐化算法3.1 介绍深度…

MySQL Workbench下载安装

官方下载地址&#xff1a; https://dev.mysql.com/downloads/workbench/ 下载完后&#xff0c;点击安装包即可 但是安装之前&#xff0c;必须要先安装Visual C 2019运行库 安装完后&#xff0c;添加数据库连接 点击 Schemas可以看到列表 点击Server可以找到导出、导入数据的菜…

如何找回回收站清空的文件?回收站文件恢复教程

电脑回收站文件被清空还能恢复之前的文件吗&#xff1f;一般情况下&#xff0c;我们把电脑桌面或C盘里的文件删除后&#xff0c;系统会将它们暂时存放在回收站里。如果想恢复这种文件&#xff0c;点击鼠标右键就可以“恢复”。 但是&#xff0c;如果为了清空垃圾增加电脑内存&a…

QT开发笔记:信号和槽

乱码问题&#xff1a; 出现乱码问题原因只有一个&#xff1a;就是编码方式不匹配&#xff01;&#xff01;&#xff01; 中文常见汉字4K,算上各种生僻字差不多六万字 仍然使用一个大表格&#xff0c;给每个汉字&#xff0c;分配一个整数即可。 字符集~~表示汉字的字符集&#…

前端开发之盒子模型

目录 盒子分类 display属性 盒子内部结构特征 padding填充区 border边框区 margin外边距 盒子width和height边界 盒子分类 块级盒子&#xff08;又叫块级元素、块级标签&#xff09; 特征&#xff1a;独占一行&#xff0c;对宽度高度支持 如&#xff1a;p div ul li h1…

Android 11 HAL层集成FFMPEG

1.集成目录&#xff1a; android/vendor/noch/common/external/NoboMediaCodec 2.文件夹目录 3. Android.mk实现 # Copyright #LOCAL_PATH : $(call my-dir)SF_COMMON_MK : $(LOCAL_PATH)/common.mkinclude $(call first-makefiles-under,$(LOCAL_PATH))4.common.mk实现 # #…

图示 JVM 可达性分析算法

可达性分析算法&#xff1a; 以 GC Roots 为起始点进行搜索&#xff0c;可达的对象都是存活的&#xff0c;不可达的对象可被回收。 Java 虚拟机使用该算法来判断对象是否可被回收&#xff0c;GC Roots 一般包含以下内容&#xff1a; 虚拟机栈中局部变量表中引用的对象本地方法栈…

Docker安装Mysql8.0主要步骤及安装过程中遇到的问题

一、创建MySQL配置目录 mkdir -p /data/mysql/data /data/mysql/logs 二、创建MySQL8镜像 docker run -p 3306:3306 --name mysql8 --restart always \ -v /data/mysql/logs:/logs \ -v /data/mysql/data:/var/lib/mysql \ -v --privilegedtrue \ -e MYSQL_ROOT_PASSWORD123…

注册安全分析报告:OneApm

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

exif格式及解析库easyexif使用介绍

1. JPEG文件结构和EXIF数据的信息 JPEG文件以字符串"0xFFD8"开头表示图像信息开始,以字符串"0xFFD9"结尾表示图像信息结束。 在JPEG文件头中有一系列"0xFF??"格式的数据段,称为"标识",用来标记JPEG文件的信息段。 0xFFE0-0xFFEF之间…

隐藏需求缺失的4种解决技巧

在需求分析过程中&#xff0c;隐藏需求的缺失往往会造成项目范围扩张、成本增加&#xff0c;造成延期交付和风险增加等问题&#xff0c;直接影响客户满意度。而隐藏需求的挖掘和确认&#xff0c;有利于优化项目范围&#xff0c;提升产品质量&#xff0c;增强团队信心。 因此&am…

MySQL 数据库 day 7.16

ok了家人们今天继续记录一下数据库,看看今天学了什么。 一.事物概述 1.1 环境准备 -- 账户表 create table account( id int primary key auto_increment, name varchar(20), money double );insert into account values (null,张三,1000); insert into account values (n…

【iOS】——ARC源码探究

一、ARC介绍 ARC的全称Auto Reference Counting. 也就是自动引用计数。使用MRC时开发者不得不花大量的时间在内存管理上&#xff0c;并且容易出现内存泄漏或者release一个已被释放的对象&#xff0c;导致crash。后来&#xff0c;Apple引入了ARC。使用ARC&#xff0c;开发者不再…

英福康INFICON TWare 32 软件操作说明

英福康INFICON TWare 32 软件操作说明

CVE-2024-24549 Apache Tomcat - Denial of Service

https://lists.apache.org/thread/4c50rmomhbbsdgfjsgwlb51xdwfjdcvg Apache Tomcat输入验证错误漏洞&#xff0c;HTTP/2请求的输入验证不正确&#xff0c;会导致拒绝服务&#xff0c;可以借助该漏洞攻击服务器。 https://mvnrepository.com/artifact/org.apache.tomcat.embed/…

【细如狗】记录一次使用MySQL的Binlog进行数据回滚的完整流程

文章目录 1 事情起因2 解决思路3 利用binlog进行数据回滚3.1 确认是否启用Binlog日志3.2 确认是否有binlog文件3.3 找到误操作的时间范围3.4 登录MySQL服务器查找binlog文件3.4.1 查询binlog文件路径3.4.2 找到binlog文件3.4.3 确认误操作被存储在哪一份binlog文件中 3.5 查看二…

【PyTorch快速入门教程】02 Jupyter notebook安装及配置

文章目录 1 安装 Jupyter notebook2 安装 ipykernel3 更改 jupyter 默认配置3.1 生成配置文件3.2 关键配置信息 4 扩展插件推荐参考 1 安装 Jupyter notebook 一行命令搞定 python -m pip install jupyter 现在就可以打开Jupyter notebook来运行python啦。 jupyter notebook…

网页设计:HTML标签

一、格式 dreamwave <!DOCTYPE html> <html ><head><meta charset"utf-8"><title>中文测试。。。。</title></head><body>这里是测试body测试内容。。。</body> </html> <head> 网页相关设置 &…