QT:qt5調用打開exe程序并獲取調用按鈕控件實例2025.5.7

為實現在 VS2015 的 Qt 開發環境下打開外部 exe,列出其界面按鈕控件的序號與文本名,然后點擊包含特定文本的按鈕控件。以下是更新后的代碼:

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
#include <windows.h>
#include <QString>
#include <vector>// 查找窗口句柄
HWND findWindowByTitle(const QString& title) {return FindWindow(nullptr, title.toStdWString().c_str());
}// 枚舉子窗口并收集按鈕句柄
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam) {wchar_t className[256];GetClassNameW(hwnd, className, sizeof(className) / sizeof(wchar_t));if (wcscmp(className, L"Button") == 0) {std::vector<HWND>* buttons = reinterpret_cast<std::vector<HWND>*>(lParam);buttons->push_back(hwnd);}return TRUE;
}// 模擬鼠標點擊
void simulateClick(HWND hwnd, int x, int y) {PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));PostMessage(hwnd, WM_LBUTTONUP, 0, MAKELPARAM(x, y));
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 啟動外部 exeQProcess process;process.start("C:\\Path\\To\\YourProgram.exe");if (!process.waitForStarted()) {qDebug() << "Failed to start the external program.";return -1;}// 等待一段時間,讓外部程序的窗口完全打開QThread::sleep(5);// 查找外部程序的主窗口HWND mainWindow = findWindowByTitle("Your Program Title");if (mainWindow == nullptr) {qDebug() << "Could not find the main window of the external program.";return -1;}// 枚舉子窗口,收集按鈕句柄std::vector<HWND> buttons;EnumChildWindows(mainWindow, EnumChildProc, reinterpret_cast<LPARAM>(&buttons));if (buttons.size() < 3) {qDebug() << "There are not enough buttons in the external program window.";return -1;}// 獲取第 3 個按鈕的句柄HWND targetButton = buttons[2];// 獲取目標按鈕的位置和大小RECT rect;GetWindowRect(targetButton, &rect);// 計算按鈕中心位置int centerX = (rect.left + rect.right) / 2;int centerY = (rect.top + rect.bottom) / 2;// 模擬點擊目標按鈕simulateClick(targetButton, centerX - rect.left, centerY - rect.top);return a.exec();
}    

代碼解釋

  1. EnumChildProc 回調函數:此函數枚舉主窗口的子窗口,當找到類名為 "Button" 的控件時,獲取其文本內容,并將按鈕句柄和文本作為一個 std::pair 存儲在向量中。
  2. 主函數流程
    • 使用 QProcess 啟動外部 exe。
    • 等待一段時間,確保外部程序的窗口完全打開。
    • 查找外部程序的主窗口。
    • 調用 EnumChildWindows 枚舉子窗口,收集按鈕句柄和文本。
    • 列出所有按鈕的序號和文本。
    • 查找包含特定文本的按鈕。
    • 若找到目標按鈕,計算其中心位置并模擬點擊操作。
      在這里插入圖片描述

注意事項

  • 需將 "C:\\Path\\To\\YourProgram.exe" 替換為實際的外部可執行文件路徑。
  • 需將 "Your Program Title" 替換為實際的外部程序窗口標題。
  • 需將 "Your Target Button Text" 替換為要點擊的按鈕的特定文本。
  • 等待時間(QThread::sleep(5))可根據外部程序的啟動速度進行調整。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Jenkins的DevOps工程實踐之Jenkins共享庫

文章目錄 前言Jenkins共享庫結構1、共享庫演示2、知識點補充3、實踐使用共享庫格式化輸出日志4、groovy基礎語法4.1、 什么是 Groovy&#xff1f;4.2、groovy特點4.3、運行方法4.4、標識符4.5、基本數據類型4.5.1、string類型4.5.2、list類型 4.6、函數使用4.7、正則表達式 5、…

【Qt4】Qt4中實現PDF預覽

方案一&#xff1a; 在Qt4中預覽PDF文件&#xff0c;你可以使用多種方法&#xff0c;但最常見和簡單的方法之一是使用第三方庫。Qt本身并沒有內置直接支持PDF預覽的功能&#xff0c;但你可以通過集成如Poppler、MuPDF等庫來實現這一功能。下面我將展示如何使用Poppler庫在Qt4中…

php artisan resetPass 執行密碼重置失敗的原因?php artisan resetPass是什么 如何使用?-優雅草卓伊凡

php artisan resetPass 執行密碼重置失敗的原因&#xff1f;php artisan resetPass是什么 如何使用&#xff1f;-優雅草卓伊凡 可能的原因 命令不存在&#xff1a;如果你沒有正確定義這個命令&#xff0c;Laravel 會報錯而不是提示”重置密碼失敗”用戶不存在&#xff1a;’a…

ai說什么是注解,并以angular ts為例

在編程中&#xff0c;注解&#xff08;Annotation&#xff09; 是一種特殊的語法結構&#xff0c;用于為代碼添加元數據&#xff08;metadata&#xff09;&#xff0c;從而在不修改代碼邏輯的情況下&#xff0c;提供額外的信息或指示編譯器、框架、工具如何處理這些代碼。注解通…

【MySQL】-- 聯合查詢

文章目錄 1. 簡介1.1 為什么要使用聯合查詢1.2 多表聯合查詢時MySQL內部是如何進行計算的 2. 內連接2.1 語法2.2 示例 3. 外連接3.1 語法3.2 示例 4. 自連接4.1 應用場景4.2 示例4.3 表連接練習 5. 子查詢5.1 語法5.2 單行子查詢5.3 多行子查詢5.4 多列子查詢5.5 在from 子句中…

【多線程】六、基于阻塞隊列的生產者消費者模型

文章目錄 Ⅰ. 生產者消費者模型的概念Ⅱ. 生產者消費者模型的優點Ⅲ. 基于阻塞隊列的生產者消費者模型MakefileBlock_queue.hpptask.hpptest.cpp Ⅳ. 如何理解提高了效率??? Ⅰ. 生產者消費者模型的概念 ? 生產者消費者模型是一種常見的并發模式&#xff0c;用于解決生產者…

【Vue】全局事件總線 TodoList 事件總線

目錄 一、 實現所有組件看到x事件 二、 實現$on $off 以及 $emit 總結不易~ 本章節對我有很大的收獲&#xff0c; 希望對你也是&#xff01;&#xff01;&#xff01; 本節素材已上傳至Gitee&#xff1a;yihaohhh/我愛Vue - Gitee.com 全局事件總線圖&#xff1a; 本節素材…

Python編程virtualenv庫的簡介和使用方法

Python編程virtualenv庫的簡介和使用方法 virtualenv和conda的區別是什么

MySQL的行級鎖鎖的到底是什么?

大家好&#xff0c;我是鋒哥。今天分享關于【MySQL的行級鎖鎖的到底是什么?】面試題。希望對大家有幫助&#xff1b; MySQL的行級鎖鎖的到底是什么? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 MySQL的行級鎖是數據庫管理系統&#xff08;DBMS&#xff09;的一…

【C++游戲引擎開發】第33篇:物理引擎(Bullet)—射線檢測

一、射線檢測核心理論體系 1.1 射線檢測的數學基礎 1.1.1 參數化射線方程 射線在三維空間中的數學表達采用參數方程: r ( t ) = o + t d ^ ( t ∈ [

【操作系統】線程崩潰機制詳解

在分布式系統與多線程編程的世界里&#xff0c;一個看似簡單的問題卻暗藏玄機&#xff1a;當某條線程突然崩潰&#xff0c;其所屬進程會隨之消亡嗎&#xff1f;這個問題背后隱藏著操作系統與編程語言的精妙設計&#xff0c;本文將從底層原理到工程實踐層層剖析。 一、線程崩潰…

無人機 | 無人機設計概述

無人機設計是一個復雜的系統工程&#xff0c;涉及空氣動力學、電子技術、材料科學、控制算法等多個領域的綜合應用。以下是無人機設計的主要模塊和關鍵要素概述&#xff1a; 一、總體設計目標 任務需求定義 用途&#xff1a;航拍、物流、農業、軍事偵察、環境監測等性能指標&am…

強啊!Oracle Database 23aiOracle Database 23ai:使用列別名進行分組排序!

大家好&#xff0c;這里是架構資源棧&#xff01;點擊上方關注&#xff0c;添加“星標”&#xff0c;一起學習大廠前沿架構&#xff01; 從 Oracle Database 23ai 開始&#xff0c;您可以在 GROUP BY 和 HAVING 子句中直接使用列別名。此功能在早期版本的 Oracle Database 中不…

Modbus 轉 IEC61850 網關

第一章 產品概述 Modbus 轉 IEC61850 網關型號 SG-IEC61850-Modbus &#xff0c;是三格電子推出的工業級網關&#xff08;以 下簡稱盒子或網關&#xff09;&#xff0c;主要用于 Modbus RTU/TCP 數據采集、 DLT645-1997/2007 數據采集&#xff0c; 可接多功能電力儀表…

MySQL 中的 MVCC 是什么?

MySQL 中的 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并發控制&#xff09; 是一種用于實現高并發讀寫操作的機制&#xff0c;它通過維護數據的多個版本來解決讀寫沖突&#xff0c;從而在保證事務隔離性的同時&#xff0c;減少鎖的使用&#xff0c…

【Python】讓Selenium 像Beautifulsoup一樣,用解析HTML 結構的方式提取元素!

我在使用selenium的find_element的方式去獲取網頁元素&#xff0c;一般通過xpath、css_selector、class_name的方式去獲取元素的絕對位置。 但是有時候如果網頁多了一些彈窗或者啥之類的&#xff0c;絕對位置會發生變化&#xff0c;使用xpath等方法&#xff0c;需要經常變動。…

使用xlwings將excel表中將無規律的文本型數字批量轉化成真正的數字

之前我寫了一篇文章excel表中將無規律的文本型數字批量轉化成真正的數字-CSDN博客 是使用excel自帶的操作&#xff0c;相對繁瑣。 今天使用xlwings操作&#xff0c;表格如下&#xff08;有真正的數字&#xff0c;也有文本型數字&#xff0c;混在在一起&#xff09;&#xff1…

ICML 2025錄取率公布,spotlight posters僅占2.6%

近日&#xff0c;ICML 2025公布了論文錄用結果。本次大會共收到 12,107篇有效論文投稿&#xff0c;比去年增加了28%&#xff0c;今年錄取論文3,260篇&#xff0c;錄取率為 26.9%。其中僅有313篇被列為“焦點海報”&#xff08;即所有投稿中排名前2.6%的論文&#xff09;&#x…

全局網絡:重構數字時代的連接范式

從局部到全局 —— 網絡架構的范式革命 在全球化與數字化深度融合的今天&#xff0c;傳統網絡架構的 “碎片化” 問題日益凸顯&#xff1a;跨地域數據流通低效、設備互聯孤島化、安全策略難以統一。 全局網絡作為一種突破地域與技術邊界的新型網絡架構&#xff0c;正成為企業…

SpringAI實現AI應用-內置顧問

SpringAI實戰鏈接 1.SpringAl實現AI應用-快速搭建-CSDN博客 2.SpringAI實現AI應用-搭建知識庫-CSDN博客 3.SpringAI實現AI應用-內置顧問-CSDN博客 4.SpringAI實現AI應用-使用redis持久化聊天記憶-CSDN博客 5.SpringAI實現AI應用-自定義顧問&#xff08;Advisor&#xff09…