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

2021-07-02 12:17:46 字數 1539 閱讀 3945

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

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

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

bool

createnew;

using

(system.threading.mutex mutex 

=new

system.threading.mutex(

true

outcreatenew))

else}

二、使用程序名

process processes =if

(processes.length 

>1)

else

newform1());}

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

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

///

///視窗控制代碼

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

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

[dllimport(

"user32.dll")]

private

static

extern

bool

showwindowasync(intptr hwnd, 

intcmdshow);

//////

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

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

///

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

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

[dllimport(

"user32.dll")]

private

static

extern

bool

setforegroundwindow(intptr hwnd);

private

const

intsw_shownomal =1

;private

static

void

handlerunninginstance(process instance)

private

static

process runinginstance()}}

return

null;}

process process 

=runinginstance();

if(process 

==null

newform1());

}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...