如何知道运行外部程序和关闭外部程序

fstao 2000-01-12 06:01:00
delphi的问题:
用这个函数:“WinExec('c:\a.exe',1)”,可以执行外部程序“c:\a.exe”。我有两个问题:
1、如何知道运行外部程序“a.exe”?
2、如何关闭外部程序“a.exe”?
...全文
415 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
limodou 2000-01-13
  • 打赏
  • 举报
回复
不过如何判断dos程序是否结束可能还有问题。

function ExecAndWait(const Filename, Params: string; WindowState: word):
boolean;
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
CmdLine:=filename+' '+params;

FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do
begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WindowState;
end;

Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL,
PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
if Result then
begin
//等待应用程序结束
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
//删除句柄
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
software 2000-01-13
  • 打赏
  • 举报
回复
建议用以下方法(和Venne所说的类似),因为我用过。
implement
uses winprocs;

...
var
apphwnd:hwnd;
...
apphwnd:=winprocs.FindWindow(nil,'窗口名'(如‘计算器’));
if apphwnd<>0 then
sendmessage(apphwnd,WM_CLOSE,0,0);
...
fstao 2000-01-12
  • 打赏
  • 举报
回复
Delphi的问题:
如何用CreateProcess,程序如下:
procedure TMain_Form.dxSideBarStore1Item9Click(Sender: TObject;
Item: TdxSideBarItem);
var
DoExec:String;
PDoExec:Array [0..255] of char;
begin
doExec:=ExtractFilePath(Application.ExeName)+'\Backup_Pr\Pr_Backup.exe';
StrpCopy(PDoExec,Doexec);
// WinExec(pDoExec,1);
CreateProcess(?);//如何写?
end;

多谢!
Venne 2000-01-12
  • 打赏
  • 举报
回复
如果你知道那个外部应用程序的标题之类的信息或者是窗口的类,这通常都是你启动程序的应用文件名,除非被人改过,例如你的a.exe名字就是a)
你可以使用EnumWindows API函数来查找,(以前有人使用FindWindow,但在32位下面不太可靠)
这样,这个函数会遍历当前计算机中运行的所有进程,并返回窗口句柄到你指定的回调函数,通过这个句柄,你可以判断某个窗口是否是某个程序,至于需要关闭它,只要向它发送一个WM_CLOSE消息就可以了
postmessage(YourwindowHandle,WM_CLOSE,0,0);
chg 2000-01-12
  • 打赏
  • 举报
回复
run the exteral program with funtion "Createpress".
and you can termite the progress with "Termiteprogress".
repus 2000-01-12
  • 打赏
  • 举报
回复
用CreateProcess代替WinExec,可检查返回的PROCESS_INFORMATION中的dwProcessId来判断程序是否被启动,使用WaitForInputIdle检查它是否开始正常运行,用
TerminateProcess结束这个程序,上两个函数中需要的hProcess参数也在PROCESS_INFORMATION中。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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