等待程序运行结束
监视另一个程序的启动和关闭的动作
对某一个窗口发送鼠标消息
对系统发消息关闭程序
- procedure TForm1.Button1Click(Sender: TObject);
- var
- sCommandLine: string;
- bCreateProcess: boolean;
- lpStartupInfo: TStartupInfo;
- lpProcessInformation: TProcessInformation;
- begin
- sCommandLine := 'D:/TEMP/TEST.EXE';
- // StartupInfo
- FillChar(lpStartupInfo, Sizeof(TStartupInfo), #0);
- lpStartupInfo.cb := Sizeof(TStartupInfo);
- lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
- lpStartupInfo.wShowWindow := SW_NORMAL;
- bCreateProcess := CreateProcess(nil, PChar(sCommandLine),
- nil, nil, True, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
- nil, nil, lpStartupInfo, lpProcessInformation);
- if bCreateProcess then //等外部进程的结束
- WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);
- end;
- Procedure WinExecAndWait(CommandLine:String);
- var ComLineBuffer: array[0..512] of char;
- StartupInfo: TStartupInfo;
- ProcessInfo: TProcessInformation;
- Re:Cardinal;
- begin
- StrPCopy(ComLineBuffer,CommandLine);
- FillChar(StartupInfo, Sizeof(StartupInfo), #0);
- StartupInfo.cb := Sizeof(StartupInfo);
- StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
- StartupInfo.wShowWindow := SW_HIDE;
- if CreateProcess(nil,
- ComLineBuffer, { pointer to command line string }
- nil, { pointer to process security attributes }
- nil, { pointer to thread security attributes }
- True, { handle inheritance flag }
- CREATE_NEW_CONSOLE or { creation flags }
- NORMAL_PRIORITY_CLASS,
- nil, { pointer to new environment block }
- nil, { pointer to current directory name, PChar}
- StartupInfo, { pointer to STARTUPINFO }
- ProcessInfo) { pointer to PROCESS_INF }
- then
- begin
- WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
- GetExitCodeProcess(ProcessInfo.hProcess, Re);
- CloseHandle(ProcessInfo.hProcess); { to prevent memory leaks }
- CloseHandle(ProcessInfo.hThread);
- end;
- end;
- SendMessage(Handle,WM_LBUTTONDBLCLK,0,0);
- SendMessage(Handle, WM_CLOSE, 0, 0);