掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
「入れ替わり型」の二重起動防止方法は? (ID:21184)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
暇だったんで、実験しました。 (以下を参考に *.dpr に書いてください。) 二重起動防止と大差ないです。 program Project1; uses Forms, Windows,Messages, Unit1 in 'Unit1.pas' {WMCloseTest}; {$R *.RES} procedure TerminatePreviousOne; var Mtx: hwnd; Wnd: hwnd; begin Mtx:= OpenMutex(MUTEX_ALL_ACCESS, False, '_WMCLOSE_TEST_'); if Mtx<>0 then begin //TWMCloseTest ... メインフォームのクラス名 //nil の部分には、メインフォームのキャプションを指定することも可能です wnd:= FindWindow('TWMCloseTest',nil); if wnd<>0 then begin SendMessage(wnd,WM_CLOSE,0,0); end; end; Mtx:= CreateMutex(nil,True,'_WMCLOSE_TEST_'); if GetLastError<>0 then CloseHandle(Mtx); end; begin Application.Initialize; TerminatePreviousOne; Application.CreateForm(TWMCloseTest, WMCloseTest); Application.Run; end. 他のアプリケーションとクラス名やキャプションが 重複するなど識別が困難な場合は工夫する必要があると思います。 _WMCLOSE_TEST_の部分も、ユニークで他と衝突し内容にしてください。 P.S. CreateMutexやってGetLastErrorだけでいけるかと思ったけど だめだった。CreateMutexやって既存のが見つかった場合 CloseHandleするから、今回起動したほうのMutexが開かれていない という状況になって、3回目の起動の時、2回目に起動した ウィンドウが閉じないということになりました。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.