Delphi 多重起動防止 Unit
多重起動防止に度々 Mutex も面倒なので Unit を作成 initialization と finalization を利用して簡素化してみた
パスを含まない実行ファイル名をキーに Mutex を作成している
※パスを含んだ実行ファイル名をキーにする場合は ¥ を別の文字列に変更する必要あり
initialization でアプリケーションを正しく終了させる方法があったら、誰か教えて下さい
使い方(アプリケーションのメインユニットで)
パスを含まない実行ファイル名をキーに Mutex を作成している
※パスを含んだ実行ファイル名をキーにする場合は ¥ を別の文字列に変更する必要あり
initialization でアプリケーションを正しく終了させる方法があったら、誰か教えて下さい
- unit RunOnceUnit;
- interface
- uses Winapi.Windows, System.SysUtils;
- var MutexAlreadyExists: Boolean = False;
- implementation
- var MutexHandle: THandle;
- initialization
- MutexHandle := CreateMutex(nil, False, PChar(ExtractFileName(ParamStr(0))));
- MutexAlreadyExists := (MutexHandle <> 0) and (GetLastError() = ERROR_ALREADY_EXISTS);
- finalization
- if (MutexHandle <> 0) then begin
- ReleaseMutex(MutexHandle);
- end;
- end.
使い方(アプリケーションのメインユニットで)
- program HOGEHOGE;
- uses
- Vcl.Forms,
- RunOnceUnit, // ユニット追加
- Unit1 in 'Unit1.pas' {Form1},
- {$R *.res}
- begin
- // ↓既に実行されていれば終了↓
- if MutexAlreadyExists then begin
- Exit;
- end;
- // ↑既に実行されていれば終了↑
- Application.Initialize;
- Application.MainFormOnTaskbar := True;
- Application.CreateForm(TForm1, Form1);
- Application.Run;
- end.
コメント