qt嵌入并控制外部程序

一、流程

1、调用Window接口模拟鼠标,键盘事件

POINT point;
LPPOINT lpppoint = &point;
GetCursorPos(lpppoint);//获取鼠标位置
SetCursorPos(point.x, point.y);//设置鼠标位置//鼠标左键按下
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, point.x, point.y, 0, 0);//获取键盘状态
short s = GetKeyState(VK_SHIFT);//按键按下,注意:字母只有大写生效且会转换为小写,大写:先按shift再写字母,或按下capital键
//微软码表:https://learn.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes
keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);

2、嵌入外部程序

使用VS自带的调用Window接口获取外部程序

打开VS -》工具-》Spy++(+)

 键盘【Ctrl + F】-》查找窗口-》将工具拖拽到已打开的程序窗口,获取到标题、类,创建窗口时使用

3、将鼠标键盘事件响应到具体坐标位置

通过与定时器配合使用可以实现一些固定的自动化操作(*^▽^*)

二、程序

==========================ExternalAPPControl.h=======================
#pragma once#include <QtWidgets/QWidget>
#include "ui_ExternalAPPControl.h"#include <Windows.h>
#include <WinUser.h>
#include <windef.h>#include <qdebug.h>
#include <qprocess.h>
#include <qwindow.h>
#include <qsettings.h>enum LANGUAGE
{ENGLISH = 0,CHINA
};
enum CAPITAL
{SMALL = 0,BIG
};class ExternalAPPControl : public QWidget
{Q_OBJECTpublic:ExternalAPPControl(QWidget *parent = nullptr);~ExternalAPPControl();private slots:void slotBtnClicked();private:void loadSettings();void loadExternalApp();private:Ui::ExternalAPPControlClass ui;QProcess* m_process;QWindow* m_window;PROCESS_INFORMATION m_pi;
};==========================ExternalAPPControl.cpp=====================
#include "ExternalAPPControl.h"ExternalAPPControl::ExternalAPPControl(QWidget *parent): QWidget(parent)
{ui.setupUi(this);loadExternalApp();QObject::connect(ui.pushButton, &QPushButton::clicked, this, &ExternalAPPControl::slotBtnClicked);
}ExternalAPPControl::~ExternalAPPControl()
{//退出进程DWORD exitCode;TerminateProcess(m_pi.hProcess, exitCode);
}void ExternalAPPControl::slotBtnClicked()
{POINT point;LPPOINT lpppoint = &point;GetCursorPos(lpppoint);//QPoint lineEditPos = ui.lineEdit->mapToGlobal(QPoint(0, 0));qDebug() << "lineEditPos:" << lineEditPos;//SetCursorPos(lineEditPos.x(), lineEditPos.y());mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, lineEditPos.x(), lineEditPos.y(), 0, 0);//获取键盘状态short s = GetKeyState(VK_SHIFT);if (s == 0)//初始化一下输入法{keybd_event(VK_SHIFT, 0, 0, 0);keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);qDebug() << "english";}else if (s == 1){}//默认中文输入法//大写keybd_event(VK_CAPITAL, 0, 0, 0);keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0);keybd_event(VK_CAPITAL, 0, 0, 0);keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0);keybd_event(65, 0, 0, 0);keybd_event(65, 0, KEYEVENTF_KEYUP, 0);//小写keybd_event(VK_CAPITAL, 0, 0, 0);keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0);keybd_event(65, 0, 0, 0);keybd_event(65, 0, KEYEVENTF_KEYUP, 0);keybd_event(VK_CAPITAL, 0, 0, 0);keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0);//鼠标归位SetCursorPos(point.x, point.y);}void ExternalAPPControl::loadSettings()
{
}void ExternalAPPControl::loadExternalApp()
{QString cmd = "C:/SoftWare/Notepad++/notepad++.exe";STARTUPINFO si = { sizeof(si) };si.dwFlags = STARTF_USESHOWWINDOW;si.wShowWindow = true;bool ret = CreateProcess(NULL,(LPWSTR)cmd.toStdWString().c_str(),NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&m_pi);Sleep(1000);WId wid = (WId)FindWindow(L"Notepad++", L"新文件 1 - Notepad++");//获取窗口句柄,类名,标题m_window = QWindow::fromWinId(wid);if (m_window){QWidget* widget = QWidget::createWindowContainer(m_window, this, Qt::Widget);ui.widget_externalAPP->layout()->addWidget(widget);}else{qDebug() << "add external app error";}}

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

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

相关文章

逻辑漏洞:初识水平越权与垂直越权

目录 1、什么是越权漏洞呢&#xff1f; 2、水平越权 3、垂直越权 4、burpsuite autorize插件 最近在学习逻辑漏洞的相关知识和技能&#xff0c;这里pikachu靶场作为演示进行学习一下&#xff1a; pikachu靶场&#xff1a;GitHub - zhuifengshaonianhanlu/pikachu: 一个好玩…

计算机服务器中了devicdata勒索病毒怎么办?Devicdata勒索病毒解密工具步骤

在这个网络飞速发展的时代&#xff0c;网络为企业的生产运营起到了关键性作用&#xff0c;利用网络可以开展各项工作业务&#xff0c;大大提高了企业生产效率与业务水平&#xff0c;在大家都为网络的便利感到欣慰时&#xff0c;网络数据安全问题&#xff0c;成为众多企业关心的…

模型智能体开发之metagpt-多智能体实践

参考&#xff1a; metagpt环境配置参考模型智能体开发之metagpt-单智能体实践 需求分析 之前有过单智能体的测试case&#xff0c;但是现实生活场景是很复杂的&#xff0c;所以单智能体远远不能满足我们的诉求&#xff0c;所以仍然还需要了解多智能体的实现。通过多个role对动…

02 spring-boot+mybatis+elementui 的登录,文件上传,增删改查的入门级项目

前言 主要是来自于 朋友的需求 项目概况 就是一个 学生信息的增删改查 然后 具体到业务这边 使用 mybatis xml 来配置的增删改查 后端这边 springboot mybatis mysql fastjson hutool 的一个基础的增删改查的学习项目, 简单容易上手 前端这边 node14 vue element…

贪吃蛇小游戏(c语言)

1.效果展示 屏幕录制 2024-04-28 205129 2.基本功能 • 贪吃蛇地图绘制 • 蛇吃食物的功能 &#xff08;上、下、左、右方键控制蛇的动作&#xff09; • 蛇撞墙死亡 • 蛇撞自身死亡 • 计算得分 • 蛇身加速、减速 • 暂停游戏 3.技术要点 C语言函数、枚举、结构…

如何更好的使用cpm

nvidia发布了RAFT库&#xff0c;支持向量数据库的底层计算优化&#xff0c;RAFT 也使用CMake Package Manager( CPM )和rapids-cmake管理项目&#xff0c;可以方便快捷的下载到需要的对应版本的thirdparty的依赖库&#xff0c;但是&#xff0c;一般情况下&#xff0c;项目是直接…

C++多态(全)

多态 概念 调用函数的多种形态&#xff0c; 多态构成条件 1&#xff09;父子类完成虚函数的重写&#xff08;三同&#xff1a;函数名&#xff0c;参数&#xff0c;返回值相同&#xff09; 2&#xff09;父类的指针或者引用调用虚函数 虚函数 被virtual修饰的类成员函数 …

DSP开发实战教程-国产DSP替代进口TI DSP的使用技巧

1.替换CCS安装路径下的Flash.out文件 找到各自CCS的安装路径&#xff1a; D:\ti\ccs1230\ccs\ccs_base\c2000\flashAlgorithms 复制进芯电子国产DSP官网提供的配置文件 下载链接&#xff1a;https://mp.csdn.net/mp_download/manage/download/UpDetailed 2.替换原有文件 3.…

Python 深度学习(一)

原文&#xff1a;zh.annas-archive.org/md5/98cfb0b9095f1cf64732abfaa40d7b3a 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 随着全球对人工智能的兴趣不断增长&#xff0c;深度学习引起了广泛的关注。每天&#xff0c;深度学习算法被广泛应用于不同行业。本书…

[GXYCTF 2019]BabyUpload

过滤 <? 且后缀不能有 php 上传1.jpg文件&#xff0c;内容为&#xff1a; <script languagephp>eval($_POST[cmd]);</script> 但文件后缀为.jpg&#xff0c;蚁剑不能连接。那怎么办呢&#xff1f; .htaccess文件&#xff1a;解析.jpg文件中的php代码 &#xf…

【C语言】——数据在内存中的存储

【C语言】——数据在内存中的存储 一、整数在内存中的存储1.1、整数的存储方式1.2、大小端字节序&#xff08;1&#xff09;大小端字节序的定义&#xff08;2&#xff09;判断大小端 1.3、整型练习 二、浮点数在内存中的存储2.1、引言2.2、浮点数的存储规则2.3、浮点数的存储过…

macbookproM2通过docker安装CDH

背景&#xff1a;项目中用的CDH大数据集群&#xff0c;但是自己的电脑上是MacM芯片的系统&#xff0c;网上在arm架构上搭建CDH集群的资料太少了&#xff0c;所以自己尝试搭建并且梳理一下文档 一、启动docker 我安装的是桌面版的docker 二、搜索CDH的镜像&#xff0c;然后拉…

【八大排序(三)】快速排序

❣博主主页: 33的博客❣ ▶️文章专栏分类:八大排序◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多排序知识 目录 1.前言2.快速排序2.1概念2.2画图理解2.3递归代码实现2.3.1Hoare法2.3.2挖坑法2.3.3前…

【介绍下OneFlow概念清单】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

智能健康管理系统的一次新体验

智能健康管理系统是一个集成了多方面数据资源&#xff0c;并配合人工智能算法的健康管理系统。该系统的应用涉及多个领域&#xff0c;包括医学、科学、生态和医疗保健等。其服务对象包括健康人群、亚健康人群和疾病人群&#xff0c;旨在通过病因预防、临床前期预防和临床预防三…

Java设计模式 _结构型模式_组合模式

一、组合模式 1、组合模式 组合模式&#xff08;Composite Pattern&#xff09;是这一种结构型设计模式。又叫部分整体模式。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次关系。即&#xff1a;创建了一个包含自己对象组的类&#xff0c;该类提供了修改…

代码随想录——双指针与滑动窗口(四)

一.1423. 可获得的最大点数 题目详情 解题思路 这里我们每次只能取最左或最右边的卡牌,第一反应其实是使用双指针&#xff0c;通过局部贪心来解决&#xff0c;但是如果两边相等的话用局部贪心无法来判断到底取哪一边&#xff0c;那我们不妨换一个思路&#xff1a; 我们首先任…

AI项目二十一:视频动态手势识别

若该文为原创文章&#xff0c;转载请注明原文出处。 一、简介 人工智能的发展日新月异&#xff0c;也深刻的影响到人机交互领域的发展。手势动作作为一种自然、快捷的交互方式&#xff0c;在智能驾驶、虚拟现实等领域有着广泛的应用。手势识别的任务是&#xff0c;当操作者做出…

写文献综述常用的几种深度神经网络模型!

写文献综述常用的几种深度神经网络模型 卷积神经网络&#xff08;CNN&#xff09; 解释说明&#xff1a;专门用于处理图像和图像数据的深度学习模型。它通过卷积层、池化层等操作提取图像特征。应用&#xff1a;图像分类、目标检测、人脸识别等。未来改进&#xff1a;进一步提…

windows和mac 电脑 部署Ollama

官网地址&#xff1a;https://ollama.com/ github地址&#xff1a;https://github.com/ollama/ollama 一、windows下 https://github.com/ollama/ollama 安装大模型 ollama run llama3 下载的大模型地址&#xff1a; C:\Users\dengg\.ollama 4.34G