ShellExecuteCase.pas 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. unit ShellExecuteCase;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, ShellApi, StdCtrls, Buttons;
  6. type
  7. TShellExecuteCaseFrm = class(TForm)
  8. btnShell: TButton;
  9. edtChildHandle: TEdit;
  10. btnShutdown: TButton;
  11. btn1: TBitBtn;
  12. procedure btnShellClick(Sender: TObject);
  13. procedure btnShutdownClick(Sender: TObject);
  14. procedure FormCreate(Sender: TObject);
  15. procedure FormDestroy(Sender: TObject);
  16. procedure btn1Click(Sender: TObject);
  17. private
  18. FHandles: TList;
  19. public
  20. { Public declarations }
  21. end;
  22. var
  23. ShellExecuteCaseFrm: TShellExecuteCaseFrm;
  24. implementation
  25. {$R *.dfm}
  26. procedure TShellExecuteCaseFrm.btn1Click(Sender: TObject);
  27. begin
  28. ShowMessage(IntToStr(Pos('2345', '234556')));
  29. end;
  30. procedure TShellExecuteCaseFrm.btnShellClick(Sender: TObject);
  31. var
  32. AHandle: Cardinal;
  33. ShExecInfo: SHELLEXECUTEINFO;
  34. begin
  35. ShExecInfo.cbSize := SizeOf(SHELLEXECUTEINFO);
  36. ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  37. ShExecInfo.Wnd := 0;
  38. ShExecInfo.lpVerb := nil;
  39. ShExecInfo.lpFile := PCHar('D:\IMClient-Root-LQQ\UITest\UITest.exe');
  40. ShExecInfo.lpParameters := nil;
  41. ShExecInfo.lpDirectory := nil;
  42. ShExecInfo.nShow := SW_SHOW;
  43. ShExecInfo.hInstApp := 0;
  44. ShellExecuteEx(@ShExecInfo);
  45. // AHandle := ShellExecute(Handle,PChar('open'),PChar('D:\IMClient-Root-LQQ\UITest\UITest.exe'),nil,nil,SW_SHOW);
  46. edtChildHandle.Text := IntToStr(ShExecInfo.hProcess);
  47. FHandles.Add(Pointer(ShExecInfo.hProcess));
  48. end;
  49. procedure TShellExecuteCaseFrm.btnShutdownClick(Sender: TObject);
  50. var
  51. AHandle: Cardinal;
  52. begin
  53. AHandle := StrToInt(edtChildHandle.Text);
  54. TerminateProcess(AHandle,0);
  55. // SendMessage(AHandle, WM_QUIT, 0, 0);
  56. end;
  57. procedure TShellExecuteCaseFrm.FormCreate(Sender: TObject);
  58. begin
  59. FHandles := TList.Create;
  60. end;
  61. procedure TShellExecuteCaseFrm.FormDestroy(Sender: TObject);
  62. begin
  63. while FHandles.Count > 0 do
  64. begin
  65. TerminateProcess(Cardinal(FHandles[0]), 0);
  66. FHandles.Delete(0);
  67. end;
  68. end;
  69. end.