unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Jpeg, ExtCtrls;

type
  TfMain = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  fMain  : TfMain;
  hSem   : Thandle;
  Cnt    : integer = 0;
  InstLim: integer = 3;

const SemName = 'ISemaph';

implementation

{$R *.dfm}


procedure TfMain.Button1Click(Sender: TObject);
begin
  Application.Terminate;
end;

initialization
  hSem := CreateSemaphore(nil, InstLim, InstLim, SemName);
  // Якщо семафор не створено або він зайнятий
  if (hSem = 0) or (WaitForSingleObject(hSem, 100) <> WAIT_OBJECT_0) then begin
    ShowMessage('Допустима кількість програм вже працює!');
    Halt;
  end else Inc(Cnt);

finalization
  if hSem <> 0 then begin
    ReleaseSemaphore(hSem, Cnt, nil);
    CloseHandle(hSem);
  end;
end.
