1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
PI1 : TProcessInformation ;
implementation
{$R *.DFM}
function ExecuteApp(StAppl1 : string): TProcessInformation ;
var
StParam1,StRepTrav1,St1 : string ;
zst1, zst2: array[0..MAX_PATH] of Char ;
StartupInfo1 : TSTARTUPINFO ;
ProcessInfo1 : TProcessInformation ;
begin
st1 := UpperCase(ExtractFileExt (StAppl1)) ;
Fillchar (ProcessInfo1,SizeOf(ProcessInfo1),0) ; // Initialisations
StParam1 := '' ;
StRepTrav1 := '' ;
if StRepTrav1 = '' then
StRepTrav1 := ExtractFilePath(StAppl1);
fillchar (StartupInfo1, SizeOf(StartupInfo1), #0);
fillchar (ProcessInfo1, SizeOf(ProcessInfo1), #0);
StartupInfo1.cb := sizeof(StartupInfo1);
StartupInfo1.dwflags := STARTF_FORCEONFEEDBACK OR StartF_UseShowWindow;
StartupInfo1.wShowWindow := SW_SHOWDEFAULT; // SW_SHOWMAXIMIZED ; // SW_SHOWDEFAULT;
if StParam1 <> '' then StAppl1 := StAppl1+' '+StParam1 ;
if CreateProcess(nil,StrPCopy(zst1,StAppl1),
nil,nil,False,
0,Nil,StrPCopy(zst2,StRepTrav1),StartupInfo1,ProcessInfo1) then
WaitForInputIDLE (ProcessInfo1.Hprocess,INFINITE) // attendre que le processus ait démarré
else
MessageDlg(SysErrorMessage(GetLastError),mtError,[mbOk],0) ;
Result := ProcessInfo1 ;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PI1 := ExecuteApp ('C:\WINDOWS\system32\calc.exe') ;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
LW1,LW2,LW3,lw4 : LongWord ;
begin
LW3 := PI1.dwProcessId ;
Lw1 := OpenProcess(PROCESS_TERMINATE,false,LW3) ;
GetExitCodeProcess(lw1,lw2);
TerminateProcess(lw1,lw2);
end;
end. |
Partager