トップへ(mam-mam.net/)

アプリケーションの2重起動をさせないようにするには。

検索:

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