二重起動がうまくいきません。

解決


Noby  2013-05-05 18:45:00  No: 44506

お世話になります。

Del6ですが、二重起動の防止がうまくいきません。

コードは過去ログDelphiによるWin32APIからコピーしています。

EXEを起動後、再度EXEを起動すると、ShowMessageは表示されますが、

その後、フォームが表示され、二重起動してしまいます。

----------------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;
  Mutex: Integer;
implementation

{$R *.dfm}

//二重起動防止コード

begin

//ミューテックスオブジェクトのハンドルを取得する
Mutex := OpenMutex(MUTEX_ALL_ACCESS, False, 'EX_Mutex');

if Mutex <> 0 then
begin

// オブジェクトのハンドルをクローズする
ShowMessage('二重起動は禁止です!');
CloseHandle(Mutex);
Exit;

end;

//ミューテックスオブジェクトを作成する
Mutex := CreateMutex(nil, False, 'EX_Mutex');

Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;

//ミューテックスオブジェクトの所有権を解放する
ReleaseMutex(Mutex);

end.


KHE00221  2013-05-05 19:50:19  No: 44507

ユニットじゃなくてプロジェクトファイル(プロジェクト⇒ソースの表示)
に記述。

もしくは

プロジェクトファイルから
Application.CreateForm(TForm1, Form1);  を削除


Noby  2013-05-05 22:45:11  No: 44508

KHE00221さん

ご親切にありがとうございます。

>ユニットじゃなくてプロジェクトファイル(プロジェクト⇒ソースの表示)
>に記述。

プロジェクトファイルに記述するんですね。

(2重起動のチェックは、プロジェクト全体のことなので

プロジェクトソースファイルに記述するということなんでしょうか・・)

やってみましたら、きちんと動作しました。

ありがとうございました。勉強になりました。


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

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






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