使程式只能執行乙個例項

2021-07-05 12:22:45 字數 1406 閱讀 2499

使我們的程式只能有乙個正在執行的例項。

並且在第二次執行時,若前乙個例項主視窗處於最小化狀態,就讓前乙個例項恢復原大小顯示出來。

前一例項程序執行期間得留下乙個可供後一例項程序判斷的標誌,類似程序間通訊,可以參考一些ipc的方式。不過這裡不需要傳遞多少資料,僅僅有個標誌就ok。

乙個簡單思路:程式開始時建立乙個可命名的核心物件,退出時關閉。如果已存在則說明存在例項在使用這個核心物件。

對於找到前例項主視窗:有乙個api,可以給視窗新增乙個標誌:setprop.通過遍歷桌面的子視窗,用getprop獲取標誌,可以判斷出我們要的視窗。

[cpp]view plain

copy

handle

m_handle;  

②在initinstance()中加入如下**:

[cpp]view plain

copy

//防止多次例項

//用應用程式名建立乙個互斥量(任意一種可命名的核心物件都行)

m_handle = createmutex(null, false, m_pszexename);   

if(getlasterror() == error_already_exists)    

[cpp]view plain

copy

int  

現在本程式只能執行一次例項了,下面使第二次執行時前例項視窗大小恢復顯示。

④在dlg類 oncreate()中給對話方塊新增標記:

[cpp]view plain

copy

intctestdlg::oncreate(lpcreatestruct lpcreatestruct)   

⑤新增訊息響應ondestroy(),視窗銷毀時去掉標記:

[cpp]view plain

copy

void

ctestdlg::ondestroy()     

[cpp]view plain

copy

bool

}     

// 繼續尋找下乙個視窗   

hwndprevious = ::getwindow(hwndprevious,gw_hwndnext);    

}     

// 前一例項已存在,但沒找到其主視窗,可能出錯了,退出本例項  

return

false;    

}  ……  

}  

好了,大功告成!

效果就是沒什麼效果了……(當第二次執行)但是為了遵循給自己定的五步流程,仍然加上此條~

附上vc6原始碼:

如何使乙個程式執行唯一例項

如果需要某個程式只執行唯一乙個例項,可以通過互斥量來實現 首先建立乙個命名互斥量,如果該名稱的互斥量已經被建立,則getlasterror 返回error already exists,只要確保你的程式建立的互斥量的命名唯一,則可斷定已經有該程式的例項存在,簡單的 如下 int main int a...

轉)如何使程式只執行乙個例項

要使應用程式只執行乙個例項,乙個簡單的方法是在應用程式類中使用互斥量,這可以用vc下的guidgen.exe程式產生.guidgen.exe位於vc安裝目錄commontools目錄下 例項1 新建一基於對話方塊的工程ex1,採用預設設定 2 用guidgen.exe產生乙個全域性標誌,define...

C 建立互斥程序(程式只能執行乙個例項)

c 建立互斥程序 程式 互斥程序 程式 簡單點說,就是在系統中只能有該程式的乙個例項執行.現在很多軟體都有這功能,如maxthon 可以設定為 只允許開啟乙個窗體 還有bitcomet等.我也是看到這些軟體的這個功能才來研究這個問題的.要實現程式的互斥,通常有4中方式,下面用 c 語言來實現 實現方...