「アプリケーションの2重起動をさせないようにするには。」
既にアプリケーションが起動していて、同じアプリケーションを起動したときに、同じアプリケーションを2重起動をさせないようにするには。
OpenMutex API
CreateMutex API
回答
アプリケーション起動時にミューテックスを探し(OpenMutex API)、既に存在すればアプリケーション起動を中止し、なければミューテックスを作成(CreateMutex API)してアプリケーションを起動します。
ソース
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TForm1 = class(TForm)
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
//2重起動防止のMutex用変数
UniqueName:String;
hMutex:THandle;
implementation
{$R *.dfm}
initialization
//2重起動を防止する
//アプリケーションの実行ファイル名を取得する
UniqueName:=ExtractFileName(Application.ExeName);
//実行ファイル名のミューテックスを取得する
hMutex := OpenMutex(MUTEX_ALL_ACCESS, False, PChar(UniqueName));
if hMutex <> 0 then
begin
CloseHandle(hMutex);
hMutex:=0;
//既に起動しているので終了する
Application.Terminate;
end
else
hMutex := CreateMutex(nil, False, PChar(UniqueName));
finalization
if hMutex <> 0 then ReleaseMutex(hMutex);
end.