1、首先需要設定乙個窗體的屬性標誌,例如設定乙個全域性的字串 cosnt cstring g_wndpropname = l"myprop";
為主窗體加上屬性標誌 ;
i、在主窗體的oninitdialog();中新增 ::setprop(m_hwnd, g_wndpropname , (handle)1); ///< param3中pdata用於。。
ii、需要注意的是對應的需要在窗體銷毀之前將窗體屬性移除 ::removeprop(m_hwnd, g_wndpropname );
2、在主程式的instance()中新增 例項驗證;
思路是當程式啟動的時候 建立乙個全域性的(跨程序的)標誌,例如 mutex ,semaphore、enent都是可以的;
然後去檢測是否建立已經存在,在已經存在的情況下去搜尋之前的那個窗體和窗體標誌,得到後前置;
handle sem = createsemaphore(null, 1, 1, l"semname");
if (sem)
setfogegroundwindow(hwndpre); ///< 窗體提到最前面
return false; ///< 返回
} hwndpre = ::getwindow(hwndpre, gw_hwndnext);
}< 如果到這裡 ,則 已經執行乙個例項但是找不到主窗體,可能是沒有設定窗體屬性(setprop)
}}else
Qt 程式單例執行
git clone git original int main int argc,char ar single instance int main int argc,char ar 在原始檔中發現所有的建構函式就只實現了兩個步驟 1.傳遞引數給基類的建構函式 2.呼叫sysinit 方法 其中sys...
應用程式單例
應用程式單例可以通過下面的幾種方法來實現 1.使用mutex類 2.使用semphore類 3.使用eventwaithandle類 其中使用semphore能控制應用程式能夠啟動的例項的個數,下面分別給出相應的實現 例子使用的都是winform應用程式.form1是乙個新建的空的窗體.1.使用mu...
WPF程式單例實現
大家肯定碰到過不少程式在乙個機器上只能啟動一次的吧 比如傲遊,windows media player等等 而在wpf應用程式如何實現這個功能呢?具體實現如下 在建立wpf應用程式後 1protected override void onstartup startupeventargs e 219 ...