[対象バージョン]
C++Builder 1.0J
[説明]
C++Builderでプログラムの二重起動を防止する方法です。
[対処法]
<プロジェクト名>.cpp 中の WinMain関数の最初に
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
//--- begin
CreateMutex(NULL, false, "SAMPLEAPP" );
if ( GetLastError() == ERROR_ALREADY_EXISTS ) {
return 0;
}
//--- end
try
{
:
のように記述してください。"SAMPLEAPP"の部分は自分自身を特定
する文字列であれば何でもよいのですが、アプリケーション名に
しておくのが適当でしょう。
//--- begin
if (FindWindow("TForm1", 0) != 0) {
return 0;
}
//--- end
のように、メインフォームのクラスを持つウィンドウを見つける
方法もありますが、ウィンドウを作成するのに時間がかかってい
ると、2重起動を許してしまうことがあるのであまりうまくあり
ません。この判定の直後に
Sleep( 5000 );
等を入れてみれば確認できます。
[サンプルソース]