使我們的程式只能有乙個正在執行的例項。
並且在第二次執行時,若前乙個例項主視窗處於最小化狀態,就讓前乙個例項恢復原大小顯示出來。
前一例項程序執行期間得留下乙個可供後一例項程序判斷的標誌,類似程序間通訊,可以參考一些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 語言來實現 實現方...