在程序a中调用另一个程序b,如何在b退出时a也自动退出?(100分)

  • 主题发起人 主题发起人 robertlz
  • 开始时间 开始时间
R

robertlz

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序a中调用另一个程序b,如何在b退出时a也自动退出?
 
可以在程序A中设置一个标志,在调用程序B时将其设为真,<br>在退出程序B时,通过程序B的退出退出事件,将程序A中的标志改变。
 
退出时发个消息给它不就行了?
 
procedure TmainF.G1Click(Sender: TObject);<br>var<br>&nbsp; cmdStr:pchar;<br>&nbsp; StartupInfo: TStartupInfo;<br>&nbsp; ProcessInfo: TProcessInformation;<br>begin<br>&nbsp;cmdstr:=pchar('./ysb.exe');<br>&nbsp;Application.Minimize;<br>&nbsp;{建立进程并等待其结束}<br>&nbsp;fillchar(StartupInfo,sizeof(StartupInfo),0);<br>&nbsp;CreateProcess(nil,cmdstr,nil,nil,false,0,nil,nil,StartupInfo,ProcessInfo);<br>&nbsp;With ProcessInfo do<br>&nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp;CloseHandle(hThread);<br>&nbsp; &nbsp; &nbsp;WaitForSingleObject(hProcess, INFINITE);<br>&nbsp; &nbsp; &nbsp;CloseHandle(hProcess);<br>&nbsp; &nbsp; &nbsp;end;<br>&nbsp;Application.Terminate<br>
 
b退出时,找a程序实例, kill a.
 
b退出时,<br>&nbsp; ExeHandle:=FindWindow(nil,'b caption'); &nbsp;---找到b的句柄<br>&nbsp; if ExeHandle&lt;&gt;0 then SendMessage(ExeHandle,WM_Close,0,0);
 
程序a定义<br>private<br>procedure Sel_win_Change(var msg:TMessage); message 11111;<br>procedure TMainForm.Sel_win_Change(var msg: TMessage);<br>begin<br>if trim(floattostr(msg.WParam))='19801129' then<br>application.Terminate<br>end;<br>程序b中的关闭事件中定义<br>var form_hw:HWND;<br>form_hw:=FindWindow(nil,'程序a定义那个响应事件的窗体的caption');<br>if boolean(form_hw) then<br>SendMessage(form_hw,11111,19801129,0);
 
是我没说清,b是别的程序,并不是我编的或能控制的,<br>也就是说,b是一个已编译好的可执行文件。
 
多人接受答案了。
 
后退
顶部