请问在delphi中怎样可以打开另外的一个exe程序, 并可以检测到它关闭

owencai 2003-10-17 03:04:05
当它关闭的时候,在delphi中可以知道
...全文
147 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞翔的老虎 2003-10-26
  • 打赏
  • 举报
回复
myhandle:=createprocess(....) ;
waitforsingleobject(myhandle,IN_FINITE);
magiclee 2003-10-26
  • 打赏
  • 举报
回复
关键是WaitforSingleObject这个API
vagerent 2003-10-21
  • 打赏
  • 举报
回复
请参考一下这段源代码:


{运行文件,并防止拷贝该可执行文件}
function WinExecAndWait32(CommandLine: string; Visibility: Integer): Cardinal;
var
WorkDir: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
{应用程序的工作目录}
WorkDir := ExtractFileDir(Application.ExeName);
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := Sizeof(StartupInfo);
{设置进程显示标志}
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
{创建进程,执行该文件}
if not CreateProcess(nil,
PChar(CommandLine), {指向命令行字符串}
nil, {指向进程安全属性}
nil, {指向线程安全属性}
True, {句柄继承标志}
CREATE_NEW_CONSOLE or {创建标志}
NORMAL_PRIORITY_CLASS,
nil, {指向环境块}
PChar(WorkDir), {指向当前目录}
StartupInfo, {指向结构STARTUPINFO }
ProcessInfo) {指向结构PROCESS_INFO }
then Result := INFINITE {-1} else
begin
FormPassDialog.Hide;{隐藏输入密码的窗口}
{防止拷贝该临时文件}
FormPassDialog.iTempFileName := FileOpen(FormPassDialog.TempFileName, fmShareExclusive);
{设置应用程序的风格}
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
{提交系统控制权}
Application.ProcessMessages;
{等待刚才创建的进程运行结束}
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
{获取进程的退出代码}
GetExitCodeProcess(ProcessInfo.hProcess, Result);
{关闭进程}
CloseHandle(ProcessInfo.hProcess);
{关闭进程}
CloseHandle(ProcessInfo.hThread);
{退出本应用程序}
FormPassDialog.Close;
end;
end;
nuaabestbo 2003-10-19
  • 打赏
  • 举报
回复
shellexecute() or winexec()
pankun 2003-10-17
  • 打赏
  • 举报
回复
用调试进程的方法打开进程,这样进程创建和退出都会发送消息到你的程序中.
具体你可以参考文档区中的文章.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧