C 程式只允許執行乙個例項的解決方案

2021-06-28 09:55:12 字數 1293 閱讀 3502

最近在做winform的程式中,需要只能開啟乙個程式,如果已經存在,則啟用該程式的視窗,並顯示在最前端。在網上google了一哈,找到了很多的解決方案。這裡我整理了3種方案,並經過了測試,現和朋友們分享:

一、使用用互斥量(system.threading.mutex)

同步基元,它只向乙個執行緒授予對共享資源的獨佔訪問權。在程式啟動時候,請求乙個互斥體,如果能獲取對指定互斥的訪問權,就職執行乙個例項。

bool createnew;

else

}

二、使用程序名

if (processes.length > 1)

else

三、呼叫win32 api,並啟用並程式的視窗,顯示在最前端

/// 該函式設定由不同執行緒產生的視窗的顯示狀態

///

/// 視窗控制代碼

/// 指定視窗如何顯示。檢視允許值列表,請查閱showwlndow函式的說明部分

/// 如果函式原來可見,返回值為非零;如果函式原來被隱藏,返回值為零

[dllimport("user32.dll")]

private static extern bool showwindowasync(intptr hwnd, int cmdshow);

/// /// 該函式將建立指定視窗的執行緒設定到前台,並且啟用該視窗。鍵盤輸入轉向該視窗,並為使用者改各種可視的記號。

/// 系統給建立前台視窗的執行緒分配的許可權稍高於其他執行緒。

///

/// 將被啟用並被調入前台的視窗控制代碼

/// 如果視窗設入了前台,返回值為非零;如果視窗未被設入前台,返回值為零

[dllimport("user32.dll")]

private static extern bool setforegroundwindow(intptr hwnd);

private const int sw_shownomal = 1;

private static void handlerunninginstance(process instance)

private static process runinginstance()}}

return null;

}

process process = runinginstance();

if (process == null)

else

只允許程式執行乙個例項

有兩類方法 第一類 判斷程序是否存在,如果存在則直接退出。第二類 最簡單也是最準確的方法,用命名的互斥物件。如下 m hmutex 可以是成員變數,全域性變數或者是區域性變數 m hmutex createmutex null,false,t not imide if m hmutex 在呼叫 cr...

C 只允許執行乙個例項

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

C WinForm程式只允許執行乙個例項

只允許程式執行乙個例項,也就是說你只能雙擊執行乙個程式一次,第二次雙擊執行將看到某某警告,只有關閉程式再開。方法有很多種 mutex執行緒互斥變數法,程序查詢法,全域性原子法。其中第一種簡單實用,其它兩種 只允許執行乙個例項 檢視。mutex執行緒互斥變數法 在program.cs檔案中修改 boo...