既に起動されているプログラムを前面に表示でききません。

解決


はじめての質問者  2006-03-09 03:22:36  No: 20433

初歩的は質問ですが...
重複チェックはうまく行くのですが、
起動プログラムが前面に表示されませんがなぜでしょう??

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);    {アプリケーションが終了したらアトム値を削除する}


アシタカ  2006-03-09 05:32:08  No: 20434

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/062/062449.html


はじめての質問者  2006-03-09 19:51:31  No: 20435

別タイトルのアプリケーションならアクティブになってくれました。
がっ、同じタイトルではだめでした....


ここそこ  2006-03-09 21:48:53  No: 20436

>ShowMessage('重複起動はできません!!');
この位置変えてみたら?
>SendMessage(hApp, WM_SYSCOMMAND, SC_RESTORE, 0);
このhAppの値もマズイんじゃない?


はじめての質問者  2006-03-10 18:39:18  No: 20437

>アシタカさん、ここそこサン
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加