當前位置:網站首頁>Qt程序設置不重複打開該程序
Qt程序設置不重複打開該程序
2022-01-27 15:47:48 【xiaoyaoyou.xyz】
Qt程序設置不重複打開該程序
文章目錄
對於已經打開的Qt桌面程序,我們希望用戶再次雙擊桌面的快捷方式時,程序可以自動激活到其他所有程序的最前面,而不是重新打開一次程序。
此時我們采用QSharedMemory方式,加上Window API函數操作程序,保證已打開程序不重複打開,並激活程序窗口到最前面
在main()函數中添加如下代碼
// Windouw API 依賴頭文件
#include <windows.h>
#include <winbase.h>
// Qt 依賴頭文件
#include <QSystemSemaphore>
#include <QSharedMemory>
int main(int argc, char *argv[])
{
// ......
//.....其他代碼
/** 程序是否已經打開檢測和激活並置於最前端控制 */
//@ 1.首先判斷程序是否已經打開
QSystemSemaphore semaphore("BTSemap", 1);
semaphore.acquire();
QSharedMemory shareMemory("BTKey");//建立共享內存對象,BTKey為改程序設置的共享內存key值,用戶根據自己需要設定
bool isRunning =false;
if (shareMemory.attach())//判斷軟件是否已經打開
{
isRunning = true;//已經打開
}
else
{
shareMemory.create(1);//軟件未打開,則創建共享內存
isRunning = false;
}
semaphore.release();
//@ 2.軟件已經打開,則將軟件激活,並置於桌面最前面
if (isRunning)
{
//@ 將軟件激活,顯示在最前端
QString wTitle = QString("TestProgram");//Qt創建的主MainWindow的 標題
HWND handle = FindWindow(nullptr, (LPCWSTR)wTitle.toLocal8Bit().toStdString().c_str());//基於windows Api 獲取程序窗口的句柄
if (handle == nullptr)//判斷是否為空
{
return -1;
}
ShowWindow(handle, SW_RESTORE);//激活窗口,參數:SW_RESTORE,以程序之前的大小顯示,可以根據需要設置其他標識,如SW_MAXIMIZE
SetForegroundWindow(handle);//激活窗口在桌面最前面
return 1;
}
//@ 3.若程序未打開,則正常執行程序,如以下屏蔽的代碼,正常啟動主界面程序
//TMainWindow w;
//w.show();
//int ret = a.exec();
return 0;
}
版權聲明
本文為[xiaoyaoyou.xyz]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201271547478372.html
邊欄推薦
猜你喜歡
隨機推薦
- win7系統上將電腦變為熱點的辦法
- Jedis連接阿裏雲redis
- 線程的生命周期,真的沒那麼簡單
- 【行研資料】2021年中國AI中臺賦能城市空間管理白皮書——附下載
- emplace_back 和 push_back 的區別
- 藍橋杯第三講--二分【習題】
- 地址的地址?
- Qt給靜態屏保加上粒子特效
- 圖的著色問題
- cesium導入旋轉動畫
- QGC雜記
- 面試面到自閉,職場反思,原來是我沒有掌握其中精髓
- CISP——關於網絡安全法(分享筆記)
- 通過ReentrantLock源碼看AQS源碼實現
- Js基礎_作用域
- Endnote使用方法——檢查參考文獻
- 記錄在appA裏面打開appB進行登錄,再次點擊桌面圖標appB避免再次重新啟動程序的解决辦法
- 自建Kubernetes的LoadBalancer類型服務方案-MetalLB
- JS中的forEach()和map()方法介紹
- 【ISO15765_UDS&OBD診斷】-02-Network layer網絡層介紹
- 百度BML-飛槳服務器以及Jetson nano部署實戰案例(下)
- 適合10歲小孩投保的保險產品都有什麼啊?少兒險可以買哪些險種?
- 北京大學2022年對元宇宙的全球研究報告
- 網上期貨開戶安全麼?期貨開戶准備什麼資料?
- 查看多臺jps的脚本
- #全網寒假最火特輯# 【第一章】 C語言之牛客網刷題筆記 【點進來保證讓知識充實你一整個寒假】
- Material Design 3 全新的進階版本UI庫
- 雲演 CTF Web題型 lfi 文件包含
- 【leectode 2022.1.22】批量處理任務
- IC驗證中的force/release 學習整理(4)後門訪問機制成與敗(續)
- Leetcode 算法面試沖刺 實戰 五(數組與循環)(十二)
- 數學建模-模糊綜合評價法(評價模型)
- Vulnhub靶機recon: 1滲透
- DWR异常:org.xml.sax.SAXException
- ZZULIOJ 1173: 密碼解密(指針專題)
- 掃雷初階版
- DCGAN 源碼解析
- [渝粵教育] 東南大學 工程熱力學 參考 資料
- Go 自定義日期時間格式解析解决方案 - 解决 `parsing time xx as xx: cannot parse xx as xx` 錯誤
- Redis 是如何處理命令的(客戶端)