WinMain関数内の変数を宣言した後に、FindWindow関数ですでに対象アプリケーションが起動しているか調べます。
見つかれば、アプリケーションの終了処理を行うだけです。
LPCSTR lpszClassName = "MSPreventionB";
LPCSTR lpszWinName = "Multiplex starting prevention Test B";
int APIENTRY WinMain(...省略)
{
...省略
if(FindWindow(lpszClassName, lpszWinName)!=NULL){ /* 二重起動防止 */
MessageBox(NULL, "すでに起動しております。"
,"Multiplex starting prevention Test B", MB_OK);
return FALSE;
}
...省略
}
WinMain関数内の変数を宣言した後に、CreateMutex関数ですでに対象アプリが起動しているか調べます。
見つかれば、アプリケーションの終了処理を行うだけです。
異なるのは、アプリケーションが起動し終了するときMutexのハンドルを解放する必要があるということです。
HANDLE hMSP; /* 多重起動防止用Mutex Handle */
int APIENTRY WinMain(...省略)
{
...省略
hMSP = CreateMutex(NULL, TRUE, "MultiplexStartingPreventionTest");
/* すでに起動しているか判定 */
if(GetLastError() == ERROR_ALREADY_EXISTS){
/* すでに起動している。*/
MessageBox(NULL, "すでに起動しております。"
,"Multiplex starting prevention Test C", MB_OK);
ReleaseMutex(hMSP);
CloseHandle(hMSP);
return FALSE;
}
...省略
/* Mutexの開放 */
ReleaseMutex( hMSP );
CloseHandle( hMSP );
return msg.wParam;
}