防止程式重複執行方法彙編

2021-06-11 05:18:31 字數 2987 閱讀 6213

///《防止重複執行》///

cstring lpszname="proj test";   //視窗的標題

handle   hmutex   =   null; 

hmutex   =   ::openmutex(mutex_all_access,true,lpszname); 

if(hmutex) 

//messagebox(null,"找到視窗","提示",mb_iconinformation);

} else

return   false; 

} hmutex   =   ::createmutex(null,true,lpszname); 

///getlastactivepopup();

pwndfirst->setforegroundwindow();

pwndfirst->showwindow(sw_shownormal);

if (pwndfirst != pwndpopup)

pwndpopup->setforegroundwindow();

return false;

}else

}最好且最簡單的辦法是用全域性原子方法如下:

int winapi winmain(.......)

else

..................

.................

return 1;

cstring strnames;

strnames="iseecommit";

handle m_hitdle;

m_hitdle=openmutex(mutex_all_access,false,strnames);

if (m_hitdle!=null)

else

if (!m_systemicon.create(this, //訊息通知視窗 

wm_icon_notify,//自定義訊息 

"my sample", //提示字串 

hicon, //圖示id號 

idr_popup_menu //彈出選單id號 

)) return -1; 

cstring strnames;

strnames="iseecommit";

handle m_hitdle;

m_hitdle=openmutex(mutex_all_access,false,strnames);

if(m_hitdle!=null)

//  messagebox("視窗已開啟!","提示",mb_iconexclamation);

exit(0);

}else

m_hitdle=createmutex(null,true,strnames);

if(!m_systemicon.create(this, //訊息通知視窗

wm_icon_notify,//自定義訊息

"my sample", //提示字串

hicon, //圖示id號

idr_popup_menu //彈出選單id號

return -1; 

方法1:

在initinstance裡面 加上

hwnd oldhwnd = null;

enumwindows(enumwndproc, (lparam)&oldhwnd);

if(oldhwnd != null)

這個也是比較簡單的

==================方法的分割線================

方法2:

===============方法的分割線===========

方法3:

=================還是分割線方法的==============

方法 4:

使用命名互斥物件:

使用api函式createmutex來建立命名互斥物件來實現程式互斥是乙個比較通用的方法,我們可以在inininstance()函式加入如下**: handle hobject =createmutex(null,false,"ljpxyxc");

if(getlasterror() == error_already_exists)

以上的createmutext函式建立乙個稱為「ljpxyxc」的命名的互斥物件,當程式的第二個例項運例時,呼叫createmutex 返回error_already_exists。我們根據這個值來實現程式的互斥執行。   

=================還有其他的哦=============

方法其他 :

oncreate(lpcreatestruct lpcreatestruct)裡面

m_hmutex=openmutex(mutex_all_access,false,"自己取乙個名字");

if(m_hmutex==null)

createmutex(null,true,"自己取乙個名字");

else

//在.h檔案的類宣告裡面新增:

handle m_hmutex;

================再其他============

用命名的互斥!

在你的程式啟動是先判斷乙個互斥a有沒有,如果互斥a不存在,就說明該程式沒有啟動,則啟動該程式

並建立該互斥a,在程式結束時銷毀互斥a

如果在啟動程式時發向互斥a存在,怎說明程式已經啟動了,則程式推出,並找到已經執行的程式的視窗,將它置在最前端!setforegroundwindow

==============常用的其他===========

常用的方法

"m_hmutex=openmutex(mutex_all_access,false,"自己取乙個名字");

if(m_hmutex==null)

createmutex(null,true,"自己取乙個名字");

else

//在.h檔案的類宣告裡面新增:

handle m_hmutex;

防止程式被重複執行

防止程式被重複執行 第一法 windows95的程式一般都可以重複執行,例如你按下win e組合鍵即啟動資 源管理器,如果再按win e組合鍵又會出現乙個資源管理器,這兩個程式互不幹 擾。有時候你可以需要製作這樣乙個程式 當該程式已經執行時,若使用者企圖 再次執行該程式則只會啟用那個已執行的程式,而...

ABAP 防止程式重複執行

有的程式需要現在同一時間只能執行乙個,這種需求可以用鎖的方式來實現,在start of selection 事件後加鎖,如果是加鎖成功,說明還沒有程式在執行,如果是加鎖失敗,則說明已經有同名程式在執行,報錯即可。注 這個鎖是借用程式修改的鎖,在se38修改程式的時候也會加這個鎖。程式如下 start...

winform程式防止重複執行

用互斥法實現防止程式重複執行,使用核心物件mutex可以防止同乙個程序執行兩次。注意 是名稱相同的程序,而不是exe,因為exe程式可以改名。在program.cs中修改 首先新增using system.threading 引用 然後原內容改為下面所示 static class program 互...