掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
二重起動を防止するには? (ID:11906)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
二重起動防止について過去ログを調べたのですが、わからなかったので教えてください。 BefCalc.exeとMainCalc.exeという2つのexeを作成しました。 このexeのアプリケーションタイトルは同じ「計算システム」という名前です。 MainCalc.exeは単独でも起動でき、BefCalc.exeからも起動させるシステムとなります。 他システムでGlobalFindAtomを使用して二重起動防止をしていたので 参考にして以下のようなプログラムを作成しました。 ========================== var Atm1: TAtom; Atm2: TAtom; ActiveHandle: THandle; Basepath : string; const SYSTEM_TITLE = '計算システム'; begin //GlobalFindAtomにプログラム名を渡してすでに登録済みかどうかを調べる Atm1 := GlobalFindAtom(PChar(ExtractFileName(Application.ExeName))); //起動EXE BasePath := ExtractFilePath(Application.ExeName); BasePath := BasePath + 'BefCalc.exe'; //別EXE Atm2 := GlobalFindAtom(PChar(BasePath)); try //戻り値が0以外の時はすでに登録済み if (Atm1 <> 0) or (Atm2 <> 0) then begin //メインウィンドウの名前でアプリケーションのハンドルを検索 ActiveHandle := FindWindow(nil, SYSTEM_TITLE); //すでに起動しているので、前面に出すなどの処理を行う if ActiveHandle <> 0 then begin showmessage('すでに起動しています。'); //アイコン状態なら元に戻す if IsIconic(ActiveHandle) then SendMessage(ActiveHandle, WM_SYSCOMMAND, SC_RESTORE, -1); //見つかったアプリケーションを前面に表示 SetForeGroundWindow(ActiveHandle); Exit; end else GlobalDeleteAtom(Atm); //プログラム実行 Atm := GlobalAddAtom(PChar(ExtractFileName(Application.ExeName))); ========================== MainCalc.exeが起動しているときはMainCalc.exeが起動できない、 BefCalc.exeが起動しているときはBefCalc.exeが起動できないように ということは出来ました。 しかし、MainCalc.exeが起動しているときはBefCalc.exeが起動しないように、 BefCalc.exeが起動しているときはMainCalc.exeは起動しないようにさせることが出来ません。 (Atm2が0で返ってくるため) ちなみに、システム名が同じなのでFindWindowをtryの前に持ってきてハンドルを取得したのですが、 この方法ではうまくいかない場合があります。 例えば、システムと同じ名前のフォルダ名(計算システムというフォルダ)を作成し、 そのフォルダを開いていたらEXEを起動していなくても起動している状態となってしまいました。 このような場合はどのようにして二重起動防止をしたらよろしいですか? よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.