Windows下實現程式單一執行

2021-04-30 11:04:23 字數 976 閱讀 5495

一 引言

程式單一執行就是在乙個作業系統中,乙個程式只有乙個例項在系統中執行.比如千千靜聽,你無法在系統中執行兩個千千靜聽的例項.

二 需求描述

三 實現概述

1,使用createmutex建立乙個全域性互斥量,並且使用setprop往mainwnd中新增乙個新項.

2,當第二個程式的例項在initinstance的時候,createmutex會失敗,並且getlasterror()會得到乙個error_already_exists的錯誤**.

3,列舉mainwnd中的cwnd,如果發現該cwnd,那麼將其最大化.

四 所使用到的win32 api以mfc庫

createmutex 

建立乙個互斥體(mutex)

cwnd::getdesktopwindow()

函式功能:該函式返回桌面視窗的控制代碼。桌面視窗覆蓋整個螢幕。桌面視窗是乙個要在其上繪製所有的圖示和其他視窗的區域。

cwnd::getwindow 

該函式返回與指定視窗有特定關係(如z序或所有者)的視窗控制代碼。

bool setprop(hwnd hwnd,lpctstr lpstring,handle hdata);

函式功能:該函式在指定視窗的屬性表中增加乙個新項,或者修改乙個現有項。如果指定的字串不在屬性表中,那麼就增加該新的項,新項中包含該字串和控制代碼,否則就用指定的控制代碼替換該字串的全前控制代碼。

handle getprop(hwnd hwnd,lpctstr lpstring);

函式功能:該函式從給定視窗的屬性列表中檢索資料控制代碼。給定的字串標識了要檢索的控制代碼。該字串和控制代碼必須在前一次呼叫setprop函式時已經加到屬性表中。

五 實現**

在cmainframe中加入wm_destroy的處理**

禁止程式多開,程式單一例項實現

不少應用程式有單一例項的需求,也就是同時只能開啟乙個例項 一般也就是乙個程序 實現的方式可能有判斷程序名字,使用特殊檔案等等,但是最靠譜的方式還是使用系統提供的 mutex 工具。mutex是互斥體,命名的互斥體可以跨程序使用,所以可以用以實現程式單一例項這個需求。相關的例子網上應該不少,不過很多給...

Windows環境下MPI程式的編譯與執行

1 準備工作 2 環境搭建 3 mpi程式編譯及執行 1 準備工作 作業系統分別為 win xp 和 win 2003 server microsoft net framework 2.0 必需 vcredist x86.exe 可能會用得到。筆者在安裝時碰到需要安裝visual c 2005 sp...

實現單一程序

有時候,乙個模組x會被其他模組函式呼叫,模組x會產生很多的實現程序,具有不同的pid號。也許模組x在系統執行時只需要乙個實現程序就可以實現它對系統的服務功能,而執行多個實現程序則會造成對系統資源的浪費,而且在某些情況下,如果模組x是對某個硬體的控制,同時執行多個程序則會導致對硬體資源的搶奪,對硬體的...