お世話になります。
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.
ユニットじゃなくてプロジェクトファイル(プロジェクト⇒ソースの表示)
に記述。
もしくは
プロジェクトファイルから
Application.CreateForm(TForm1, Form1); を削除
KHE00221さん
ご親切にありがとうございます。
>ユニットじゃなくてプロジェクトファイル(プロジェクト⇒ソースの表示)
>に記述。
プロジェクトファイルに記述するんですね。
(2重起動のチェックは、プロジェクト全体のことなので
プロジェクトソースファイルに記述するということなんでしょうか・・)
やってみましたら、きちんと動作しました。
ありがとうございました。勉強になりました。
ツイート | ![]() |