初歩的は質問ですが...
重複チェックはうまく行くのですが、
起動プログラムが前面に表示されませんがなぜでしょう??
conExeName = 'MainMenu'
var
Atm : TAtom; {アトム値}
hApp : THandle; {アプリケーションのハンドル}
begin
{GlobalFindAtomでアプリケーション名が登録済みか調べる}
Atm := GlobalFindAtom(PChar(ExtractFileName(Application.ExeName)));
{戻り値が0以外ならすでに登録されている=起動されている}
If 0 <> Atm Then Begin
{自分と同じタイトルのアプリケーションを探す}
hApp := FindWindow(nil, conExeName);
If 0 <> hApp Then Begin
{既に起動されている場合は前面に表示するのみ}
SendMessage(hApp, WM_SYSCOMMAND, SC_RESTORE, 0);
SetForeGroundWindow(hApp);
ShowMessage('重複起動はできません!!');
Exit;
End;
End Else Begin
{起動されていない場合はアトム値を登録する}
{GlobalAddAtomで新規のアトム値を登録する}
Atm := GlobalAddAtom(PChar(ExtractFileNAme(Application.ExeName)));
{Atm が0ならアトム値が登録できなかったのでエラーにする}
If 0 = Atm Then Begin
ShowMessage('起動できません!!');
Exit;
End;
End;
Application.Initialize;
Application.CreateForm(TFMenu, FMenu);
Application.Run;
GlobalDeleteAtom(Atm); {アプリケーションが終了したらアトム値を削除する}
http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/062/062449.html
別タイトルのアプリケーションならアクティブになってくれました。
がっ、同じタイトルではだめでした....
>ShowMessage('重複起動はできません!!');
この位置変えてみたら?
>SendMessage(hApp, WM_SYSCOMMAND, SC_RESTORE, 0);
このhAppの値もマズイんじゃない?
>アシタカさん、ここそこサン
ありがとうございました。
ツイート | ![]() |