日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

Qt双击桌面快捷方式激活并使程序窗口置于最前端

發布時間:2025/3/19 HTML 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt双击桌面快捷方式激活并使程序窗口置于最前端 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方法二轉載:https://blog.csdn.net/winstonyi/article/details/108737600

qt在桌面應用程序中,會存在一個問題,官方示例中也無提及,桌面快捷方式,喚醒已經最小化的窗口,因為大部分情況下,不可能讓窗口一直保持在前臺,最小化后,在需要時有必須讓其快速顯示,windows托盤圖標在某些情況下,受圖標緩沖影響,就是不顯示!最直接和可靠的渠道就是,桌面快捷方式和開始菜單的快捷方式,也比較符合大部分普通用戶習慣!

?

方法一:

?起初遇到該問題,我們測試,直接雙擊桌面快捷方式,默認是相當于“雙開”,也就說打開同樣的程序的第二個,對于有端口號等應用程序,明顯會出錯,因為都被一個占了,和同事試了各種方法,最多只能用QSharedMemory忽略再次打開這個動作,保證無法重復打開,無法喚醒已經最小化到托盤的窗口。

后來無意間,在現場商量到了一個實現方式,是通過udp消息喚醒窗口。每次打開程序,默認給指定端口,發出特定消息,已經運行的應用程序收到該消息后,主動showwindow,實現了,打開桌面快捷方式,喚醒已經最小化的窗口;

方法二:

博主Chervin(https://blog.csdn.net/winstonyi/article/details/108737600),在2020年9月開源了,新的方法,采用QSharedMemory方式,加上Window API函數操作程序,保證已打開程序不重復打開,并激活程序窗口到最前面。

仔細看其原理,應該是合理的解決方案。

可能qt的大多人對windows?api并不熟悉,下為實現方法,可自行參考,

// 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,wTitle.toLocal8Bit().toStdString().c_str());//基于windows Api 獲取程序窗口的句柄if (handle == nullptr)//判斷是否為空{return -1;}ShowWindow(handle, SW_RESTORE);//激活窗口,參數:SW_RESTORE,以程序之前的大小顯示,可以根據需要設置其他標識,如SW_MAXIMIZESetForegroundWindow(handle);//激活窗口在桌面最前面return 1;}//@ 3.若程序未打開,則正常執行程序,如以下屏蔽的代碼,正常啟動主界面程序//TMainWindow w;//w.show();//int ret = a.exec();return 0; }

?

總結

以上是生活随笔為你收集整理的Qt双击桌面快捷方式激活并使程序窗口置于最前端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。