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

A 回答 (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-PaloAlt …
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/03/04 23:44

C++Builder5使用者です。


下のseataさんの方法で全く問題ありません。

もちろん起動時に調べないと防止できないのでこれはWinMainで記述します。

最後に参考になるページをあげておきます。
C++BuilderのTipsページは結構ありますよ。

参考URL:http://www.din.or.jp/~chiru/
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/03/04 23:42

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にはアプリケーションを識別する名前を指定しておく。

という感じでどうでしょう?
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/03/04 23:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報

カテゴリ