| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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.
|