[対象バージョン]

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 );

等を入れてみれば確認できます。

 

[サンプルソース]

 

FAQ目次に戻る