- 締切済み
2重起動の防止
C++Builder5.0でアプリケーションの2重起動の防止 を実現する方法を教えて下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- okwebenomoto
- ベストアンサー率66% (6/9)
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にはついていた。
- BLACKTALON
- ベストアンサー率37% (110/293)
C++Builder5使用者です。 下のseataさんの方法で全く問題ありません。 もちろん起動時に調べないと防止できないのでこれはWinMainで記述します。 最後に参考になるページをあげておきます。 C++BuilderのTipsページは結構ありますよ。
- 参考URL:
- http://www.din.or.jp/~chiru/
お礼
御返事ありがとうございました。
- seata
- ベストアンサー率0% (0/0)
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にはアプリケーションを識別する名前を指定しておく。 という感じでどうでしょう?
お礼
御返事ありがとうございました。
お礼
御返事ありがとうございました。