class CUnduplicationApp{
protected:
HANDLE m_handle;
public:
CUnduplicationApp():m_handle(NULL){;}
~CUnduplicationApp(){if(m_handle != NULL)CloseHandle(m_handle);}
BOOL Regist(LPSTR exename){
if(m_handle != NULL)CloseHandle(m_handle);
m_handle = CreateMutex(NULL,FALSE,exename);
if(WaitForSingleObject(m_handle,0) == WAIT_OBJECT_0)return TRUE;
return FALSE;
}
};
// 上記のクラスは、以下のようにグローバルにクラスを宣言します
CUnduplicationApp UndupApp;
// WinMain関数等の中で、以下のように二重起動を調べます
int WINAPI WinMain(HINSTANCE inst,HINSTANCE prev,LPSTR cmd,int show)
{
if(!UndupApp.Regist("ABCDEFG.EXE")){ // "..." 内には起動するEXE名
// 二重起動を検出したとき
return 0;
}
//
// ここからメインルーチンを書いていきます。
//
return 0;
}