《ヘッダーファイル》 #include "windows.h" #define PROGRAM_TITLE "GWProgram" //プログラムのタイトル名 《ソースファイル》 HANDLE hMutex; //結果取得ハンドル hMutex = CreateMutex( NULL, TRUE, "__GW__SYSTEM"); //現在の起動状態を取得 if(GetLastError() == ERROR_ALREADY_EXISTS) //二重起動が見つかった場合 { MessageBox( NULL, "二重起動が見つかりました!", "テスト", MB_OK ); HWND hWnd = FindWindow(NULL, PROGRAM_TITLE); //親ウインドウを捜す if( hWnd != NULL ) { SetForegroundWindow( hWnd ); //親ウインドウをアクティブに設定 ShowWindow(hWnd, SW_SHOWNORMAL); } return 1; //プログラム終了 } ReleaseMutex( hMutex ); |
引数名 | 名前 | 内容 |
第一引数 | セキュリティ記述子 | 子プロセスが、取得したハンドルを継承できるかどうかを決定します。基本的に、NULLをセットしておけば問題ありません。 |
第二引数 | 最初の所有者 | 初期の所有者を指定します。この設定がTRUEの場合、二回目に起動したプログラムは最初の所有者になれず、エラーを返します。 |
第三引数 | オブジェクトの名前 | ここで設定した文字列を頼りに、自分と同じプログラムが起動しているかを調べます。従って、全然別のプログラムであっても、 名前が偶然一致した場合には、二重起動と見なされてしまいます。なるべく名前は、かぶらないようにしましょう。 |