主要目的是,sub.exe一旦被關閉,main.exe 也跟著被關閉。
我把這個寫到timer里的,一直在那回圈,總感覺不對勁,是否有更先進的方法?
在main.exe里寫,如果行程里沒sub.exe 就ExitProcess(0);
uj5u.com熱心網友回復:
最簡單就用timer,但不用回圈吧?把時間設短一點,然后監控sub.exe的行程句柄就可以了,一旦獲取失敗就退出。uj5u.com熱心網友回復:
如果 Main 和 Sub 都是你自己寫的,那就很簡單,你讓 Sub 退出的時候給 Main 的一個視窗發個訊息就行。如果 Main 是自己寫的,而 Sub 不是自己寫的,那么就上邊的做法
如果 Main 不是自己寫的而 Sub 是自己寫的,那么就 Sub 退出的時候先FindWindow找出 Main 的主視窗給發個 WM_CLOSE 訊息過去
uj5u.com熱心網友回復:
SUB.exe程式中:一、呼叫Main.EXE時,記下它的句柄。
ExeHandle:=findWindow(nil,'視窗名稱'); // 回傳EXE句柄
or
shellexecute(exehandle,'open',pchar('main.exe'),'',nil,sw_shownormal);
二、退出時,關閉該句柄的執行緒。
if ExeHandle<>0 then
begin
SendMessage(EXEHandle,WM_Close,0,0); // 向EXE發送關閉訊息
ExeHandle:=0;
end;
uj5u.com熱心網友回復:
如果都是DELPHI寫的有種很簡單的辦法,直接寫一個回呼函式(callback)1.MainForm撰寫一個
procedure MainForm.CallBackClose(Sender:TOBject);
begin
try
Self.Free
except
end;
end;
2.subForm加入回呼代碼
增加回呼函式型別
type
TCallBackClose:procedure (Sender:TOBject) of object;
....
var
CallBackMain:TCallBackClose;
....
在SubForm關閉的事件中加入
CallBackMain(SELF);
3.MainForm啟動SUBFORM的時候記下HANDLE
4.通過HANDLE找到SUBFORM
5.將MainForm的CallBackClose傳遞給SUBFORM
TForm(subFormHWND).CallBackMain:=CallBackClose;
這樣,就不需要執行緒、不需要訊息、不需要TIMER去監聽了,只要SUBFORM CLOSE或是你想要關閉MainForm的時候,執行CallBackMain(SELF) MAINFORM就CLOSE
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/35970.html
標籤:語言基礎/算法/系統設計
