unit ShellExecuteCase; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ShellApi, StdCtrls, Buttons; type TShellExecuteCaseFrm = class(TForm) btnShell: TButton; edtChildHandle: TEdit; btnShutdown: TButton; btn1: TBitBtn; procedure btnShellClick(Sender: TObject); procedure btnShutdownClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btn1Click(Sender: TObject); private FHandles: TList; public { Public declarations } end; var ShellExecuteCaseFrm: TShellExecuteCaseFrm; implementation {$R *.dfm} procedure TShellExecuteCaseFrm.btn1Click(Sender: TObject); begin ShowMessage(IntToStr(Pos('2345', '234556'))); end; procedure TShellExecuteCaseFrm.btnShellClick(Sender: TObject); var AHandle: Cardinal; ShExecInfo: SHELLEXECUTEINFO; begin ShExecInfo.cbSize := SizeOf(SHELLEXECUTEINFO); ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS; ShExecInfo.Wnd := 0; ShExecInfo.lpVerb := nil; ShExecInfo.lpFile := PCHar('D:\IMClient-Root-LQQ\UITest\UITest.exe'); ShExecInfo.lpParameters := nil; ShExecInfo.lpDirectory := nil; ShExecInfo.nShow := SW_SHOW; ShExecInfo.hInstApp := 0; ShellExecuteEx(@ShExecInfo); // AHandle := ShellExecute(Handle,PChar('open'),PChar('D:\IMClient-Root-LQQ\UITest\UITest.exe'),nil,nil,SW_SHOW); edtChildHandle.Text := IntToStr(ShExecInfo.hProcess); FHandles.Add(Pointer(ShExecInfo.hProcess)); end; procedure TShellExecuteCaseFrm.btnShutdownClick(Sender: TObject); var AHandle: Cardinal; begin AHandle := StrToInt(edtChildHandle.Text); TerminateProcess(AHandle,0); // SendMessage(AHandle, WM_QUIT, 0, 0); end; procedure TShellExecuteCaseFrm.FormCreate(Sender: TObject); begin FHandles := TList.Create; end; procedure TShellExecuteCaseFrm.FormDestroy(Sender: TObject); begin while FHandles.Count > 0 do begin TerminateProcess(Cardinal(FHandles[0]), 0); FHandles.Delete(0); end; end; end.