Mam's WebSite

Mamの覚書Q&A検索


大項目:「 Delphi 」 - 中項目:「 API 」

「 アプリケーションの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.

Copyright 2019 Mam