unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyThread = class(TThread)
protected
procedure Execute; override;
public
constructor Create;
destructor Destroy; override;
end;
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
hProcess: THandle; {进程句柄}
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
pInfo: TProcessInformation;
sInfo: TStartupInfo;
Path: array[0..MAX_PATH - 1] of Char;
ThreadID: DWORD;
begin
GetSystemDirectory(Path, MAX_PATH);
StrCat(Path, '\notepad.exe');
FillChar(sInfo, SizeOf(sInfo), 0);
if CreateProcess(Path, nil, nil, nil, False, 0, nil, nil, sInfo, pInfo) then
begin
hProcess := pInfo.hProcess; {获取进程句柄}
Text := Format('进程 %d 已启动', [hProcess]);
with TMyThread.Create do
Resume;
end;
end;
{ TMyThread }
constructor TMyThread.Create;
begin
inherited Create(True);
FreeOnTerminate := True;
end;
destructor TMyThread.Destroy;
begin
inherited;
end;
procedure TMyThread.Execute;
var
I: Integer;
begin
inherited;
if WaitForSingleObject(hProcess, INFINITE) = WAIT_OBJECT_0 then
begin
Form1.Text := Format('进程 %d 已关闭', [hProcess]);
end;
end;
end.