我在主程序中用winexec调用几个可执行文件,但主程序关闭后,这几个程序还在运行,不知该怎么办才能让主程序关闭,这些程序也关闭,谢了(30分)

  • 主题发起人 主题发起人 陈君凯
  • 开始时间 开始时间
当然不能用 WinExec 函数的,<br>
 
那该用什么?
 
WinAPI: CreateProcess<br>
 
有例子吗?<br>我找不到相应的帮助文件
 
Win32 SDK help中有详细讲的, 如果全装了Delphi的Help的话, 有的.
 
var<br>&nbsp; pInfo:TProcessInformation;<br>&nbsp; sInfo:TStartupInfo;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br><br>&nbsp; &nbsp; sInfo.cb := SizeOf(sInfo);<br>&nbsp; &nbsp; sInfo.dwFlags := STARTF_USESHOWWINDOW;<br>&nbsp; &nbsp; sInfo.wShowWindow := SW_SHOW;<br>&nbsp; &nbsp; if not CreateProcess('c:/windows/notepad.exe',nil,nil,nil,False,0,nil,nil,sInfo,pInfo) then<br>&nbsp; &nbsp; showmessage('Failed!');<br>end;<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>begin<br>&nbsp; &nbsp;TerminateProcess(pInfo.hProcess,0);<br>end;<br><br>
 
行倒是行了,不过程序运行后好像一直没有退出内存呀,为什么
 
&nbsp; &nbsp;因为你调用的外部程序都是明确的 或者你可以通过另一种方式来实现<br>&nbsp; &nbsp; 就是使用 FindWindow() 找到指定应用程序的句柄 再使用 SendMessage()<br>&nbsp; &nbsp; 发送 WM_CLOSE 消息关闭对应的应用程序 不过FindWindow() 你必须自己声<br>&nbsp; &nbsp; 明声明可以参考 shellapi.pas 中其他 winapi 函数的声明方法 <br>&nbsp; &nbsp; 使用FindWindow()的注意事项是 如果你自己启动的应用程序的主窗口没有<br>&nbsp; &nbsp; 固定的窗口标题的话 你应该使用 WINSIGHT32.EXE 程序来获得该程序的类<br>&nbsp; &nbsp; 名称 例子为: findwindow(类名称,nil) 如果获得的句柄不为0 则该程序<br>&nbsp; &nbsp; 还在运行中 可以使用 sendmessage(获得的句柄,WM_CLOSE, 0, 0); 来关<br>&nbsp; &nbsp; 闭该应用程序 保险的话 还应该再使用 findwindow() 再找一次 并且可以<br>&nbsp; &nbsp; 使用定时器来说明是否该应用程序已经崩溃 没有办法关闭了<br>&nbsp; &nbsp; 先试一试吧<br>
 
后退
顶部