二重起動の判定
|
該当記事で以下のようなユニットが紹介されています
unit Unique;
interface
uses
Windows, Sysutils;
implementation
var
UniqueName : string;
hMutex: THandle;
initialization
UniqueName := ExtractFileName(ParamStr(0));
hMutex := OpenMutex(MUTEX_ALL_ACCESS, false, pchar(UniqueName));
if hMutex <> 0 then
begin
CloseHandle(hMutex);
Halt;
end;
hMutex := CreateMutex(nil, false, pchar(UniqueName));
finalization
ReleaseMutex(hMutex);
end.
Mutex は同じ名前のものは 2 つ存在することはできません.
ここでは ExtractFileName(ParamStr(0)) を mutex の名前にしています.
複数のアプリケーションで(意図的な場合は除いて)同じ名前の mutex を作成しようとすると問題になる可能性が高いため、できるだけユニークな名前を割り当てるようにしなければなりません.
また、このユニットではすでに mutex が存在していた場合に Halt 手続きを実行しています.
該当部分を書きかえることによって二重起動時に任意のアクションを起こすことができるでしょう. |
|