• 締切済み

2重起動の防止

C++Builder5.0でアプリケーションの2重起動の防止 を実現する方法を教えて下さい。

みんなの回答

回答No.3

C++Builder5.0は経験ないのですが。C++Builder4.0/3.0では以下の様にすればOKでした。C++Builder5.0でも同様だと思います。 winmain()の先頭でFindWindow()(WIN32API)を使用して同じクラスまたはウインドウタイトルをもつウインドウが起動されていない事を確認すればOK FindWindow()についてはC++Builder5.0のCD-ROMにWin32日本語ヘルプがついているはずなのでそれを見ればOK C++Builder4.0/3.0にはついていた。

参考URL:
http://www.geocities.co.jp/SiliconValley-PaloAlto/9180/appquit.html
Richi
質問者

お礼

御返事ありがとうございました。

回答No.2

C++Builder5使用者です。 下のseataさんの方法で全く問題ありません。 もちろん起動時に調べないと防止できないのでこれはWinMainで記述します。 最後に参考になるページをあげておきます。 C++BuilderのTipsページは結構ありますよ。

参考URL:
http://www.din.or.jp/~chiru/
Richi
質問者

お礼

御返事ありがとうございました。

  • seata
  • ベストアンサー率0% (0/0)
回答No.1

C++Builderがどのようなものか知らないのでWin32一般的に説明します。 ------------------------------------------------------------ static HANDLE hInstanceMutex = NULL; BOOL IsExistInstanceMutex(const char* s) { HANDLE hPrevMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE, s); if(hPrevMutex) { CloseHandle(hPrevMutex); return FALSE; } hInstanceMutex = CreateMutex(FALSE, 0, s); return TRUE; } void ReleaseInstanceMutex() { if(hInstanceMutex) ReleaseMutex(hInstanceMutex); } ------------------------------------------------------------ 起動時にIsExistInstanceMutexを呼んでTRUEが返るなら前のアプリは無し FALSEが返る場合は、2重起動なのでメッセージを表示して終了。 アプリケーションの終了時にReleaseInstanceMutexを呼ぶ。 IsExistInstanceMutexのsにはアプリケーションを識別する名前を指定しておく。 という感じでどうでしょう?

Richi
質問者

お礼

御返事ありがとうございました。

関連するQ&A