unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UruchamianieAplikacji, StdCtrls, KontrolaAplikacji;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button3: TButton;
    Label4: TLabel;
    Button4: TButton;
    Label5: TLabel;
    Button2: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    cp :TControlProcess; //przeniesione
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//var cp :TCreateProcess; //tu bylo przy uzywaniu TCreateProcess
begin
if cp=nil then cp:=TControlProcess.Create(Self);
if cp.IsExecuted then
  begin
  ShowMessage('Aplikacja jest juz uruchomiona');
  Exit;
  end;

cp.FileName:='sol.exe';
cp.WindowStyle:=swNormal;
cp.Priority:=prIdle;
cp.DefaultPosition:=True;
cp.Left:=300;
cp.Top:=10;
//aplikacje zwykle same kontroluja poczatkowa wielkosc okna
cp.DefaultSize:=False;
cp.Width:=600;
cp.Height:=300;

if cp.Execute() then
  begin
  Label1.Caption:='Nazwa pliku: '+cp.FileName;
  Label2.Caption:='Uchwyt procesu: '+IntToStr(cp.ProcessInformation.hProcess)+', '+
     'Identyfikator procesu: '+IntToStr(cp.ProcessInformation.dwProcessId);
  Label3.Caption:='Uchwyt wątku: '+IntToStr(cp.ProcessInformation.hThread)+', '+
     'Identyfikator wątku: '+IntToStr(cp.ProcessInformation.dwThreadId);
  end
  else ShowMessage('Uruchomienie aplikacji '+cp.FileName+' nie powiodło się.');
end;

procedure TForm1.Button2Click(Sender: TObject);
var cp_eaw :TCreateProcess;
begin
cp_eaw:=TCreateProcess.Create(Self);
cp_eaw.FileName:='sol.exe';
Self.WindowState:=wsMinimized;
cp_eaw.ExecuteAndWait;
Self.WindowState:=wsNormal;
end;

//kontrola dzialajacej aplikacji
procedure TForm1.Button3Click(Sender: TObject);
begin
  if (cp=nil) or (not cp.IsExecuted) then
    begin
    ShowMessage('Aplikacja musi działać. Kliknij przycisk "Uruchom"');
    Label4.Caption:='-';
    Label5.Caption:='-';
    Exit;
    end;

  Label4.Caption:='Tytuł: "'+cp.Caption+'", X: '+IntToStr(cp.Left)+', Y: '+IntToStr(cp.Top)+', Szer: '+IntToStr(cp.Width)+', Wys: '+IntToStr(cp.Height);
  Label5.Caption:='Identyfikator procesu: '+IntToStr(cp.ProcessInformation.dwProcessId)+', uchwyt okna: '+IntToStr(cp.WindowHandle);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if (cp=nil) or (not cp.IsExecuted) then
    begin
    ShowMessage('Aplikacja musi działać. Kliknij przycisk "Uruchom"');
    Exit;
    end;

  cp.Priority:=prHigh;
  cp.Caption:='Helion';
  cp.WindowStyle:=swNormal;
  cp.Left:=Screen.WorkAreaLeft;
  cp.Top:=Screen.WorkAreaTop;
  cp.Width:=Screen.WorkAreaWidth;
  cp.Height:=Screen.WorkAreaHeight div 2;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  if (cp=nil) or (not cp.IsExecuted) then
    begin
    ShowMessage('Aplikacja musi działać. Kliknij przycisk "Uruchom"');
    Exit;
    end;

  cp.BringToFront;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  if (cp=nil) or (not cp.IsExecuted) then
    begin
    ShowMessage('Aplikacja musi działać. Kliknij przycisk "Uruchom"');
    Exit;
    end;

  cp.Terminate;
end;

end.
