請問如何在程式中去關掉另一個已開啟的程式 |
尚未結案
|
allan1314
一般會員 發表:3 回覆:3 積分:1 註冊:2004-10-06 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
allan1314 你好: 這是我之前的一個case寫的,你擋著用先...
private //子系統的FLAG iHDTag: Integer; //子系統使用位置存放 HDArray: array[1..1000] of Integer; //目前使用之PROCESS fLastProcess: THandle; //sExeName 執行檔名稱, sParams 是參數如果你有的話啦...不然就空著吧,如果有一個以上要用 , 號隔開 procedure TForm1.OpenSubSys(sExeName, sParams: String); var ExecInfo: SHELLEXECUTEINFO; APath: array [0..MAX_PATH] of Char; //sFileName: String; begin iHDTag:= iHDTag 1; FillMemory(@ExecInfo,SizeOf(SHELLEXECUTEINFO),0); ExecInfo.cbSize:= SizeOf(SHELLEXECUTEINFO); ExecInfo.fMask:= SEE_MASK_NOCLOSEPROCESS; ExecInfo.Wnd:= 0; ExecInfo.lpFile:= PChar(Trim(sExeName)); ExecInfo.lpParameters:= PChar(Trim(sParams)); ExecInfo.nShow := SW_SHOWNORMAL; ShellExecuteEx(@ExecInfo); fLastProcess:= ExecInfo.hProcess; HDArray[iHDTag]:= fLastProcess; GetModuleFileNameEx(FLastProcess, 0, @APath[0], SizeOf(APath)); //WaitForSingleObject(fLastProcess, 10000); //sFilename:= StrPas(APath); end; procedure TForm1.CloseSubSys; var ExitCode:DWORD; i: Integer; begin for i:= 1 to iHDTag do begin if HDArray[i] <> 0 then begin GetExitCodeProcess(HDArray[i], ExitCode); if ExitCode=STILL_ACTIVE then begin TerminateProcess(HDArray[i],0); FLastProcess:= 0; end; end; end; end; |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 請問 我用WinExec 在A去開啟了B 我想在關掉A的同時,也關掉B 謝謝這是另外一種比較簡單 ..... implementation uses ... function CloseB(Wnd: HWnd): Boolean; stdcall; var sCap: array [0..255] of char; begin GetWindowText(Wnd, sCap, sizeof(sCap)); //mncap為視窗標題名稱, 即B程式的Application.Title // 你可以指定mncap變數代入, 或者直接以B的Application.Title取代 // 如 'MYTITLE' if pos(mncap,sCap) > 0 then begin PostMessage(Wnd, WM_CLOSE, 0, 0); end; CloseB:= True; end; 呼叫時 EnumWindows(@CloseB,0); |
allan1314
一般會員 發表:3 回覆:3 積分:1 註冊:2004-10-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |