全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1842
推到 Plurk!
推到 Facebook!

一個 EXE 如何知道自己的 HWND?

答題得分者是:Justmade
ycchin
一般會員


發表:4
回覆:3
積分:1
註冊:2003-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-16 14:53:08 IP:61.220.xxx.xxx 未訂閱
請問幾個問題 1. 一個沒有 UI 的 EXE, 也有其 HWND? 2. 一個 EXE 如何知道自己的 HWND? 3. 如何我寫的是一個 OCX, 別人在 EXE 中包這 OCX, OCX 可以知道 EXE 的 HWND? 先謝謝啦
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-16 15:31:52 IP:218.16.xxx.xxx 未訂閱
1. EXE 本身是沒有 HWND (Handle of Window) 的 ,是他的 Controls 有 HWND。若一個 EXE 有 Controls (如 Form) 即使沒顯示出來,也會有 Control 的 HWND。反之若完全沒任何 Control 便沒 HWND。 2. 雖說 EXE 本身沒有 HWND,但有時也會有人把 EXE MainForm 的 HWND 當成是 Application 的 Handle。在 Delphi 程式中可使用 Application.Handle 取得 但其實直正的 Application Handle 應是 HInstance (可直接用 HInstance 取得) 3. 若你的 OCX 有Control, 可通過一連串的 GetParent 來取得。
ycchin
一般會員


發表:4
回覆:3
積分:1
註冊:2003-06-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-16 16:04:21 IP:61.220.xxx.xxx 未訂閱
先謝謝您的回應 其實我要實作的程式是, 有一 admin 程式, 會有一 ini 檔記錄其所管理的幾組 exe path name. (exe 是別人寫的, 我提供他 ocx) admin 使用 indy web server 接受 request, admin 及 exe 是用 indy tcp socket 溝通, 工作是由 exe 完成, 再回給 admin 程式. admin 發現負荷增加時, 會 createprocess exe, 負荷輕時也會 terminateprocess exe. 本來可以直接記錄 exe 的 TProcessInformation.hProcess 就可以了, 不過由於 exe 開起來時, 會自動 bind tcp port, 所以希望 exe 可以回報 tcp port 及 hwnd. 對於如此架構, 請問有沒有更好建議? -- 我做的測試 Q1: prog1 showmessage(inttostr(self.handle) showmessage(inttostr(application.handle) showmessage(inttostr(hinstance) 此三者回應的值都不同, 可否釋疑? Q2: prog2 在另一程式, 用 edit1 抄上述三值 terminateprocess(strtoint(edit1.text),0) 都無法 kill prog1 請問應如何做才正確 thanks!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-16 16:51:22 IP:218.16.xxx.xxx 未訂閱
TerminateProcess 的參數是 hProcess,建議你在 CreateProcess 時記下這個 hProcess 留作 Terminate Process 用    你可以 CreateProcess 時記下 TProcessInformation.hHandle 及 TProcessInformation.dwProcessId Exe 可以用 GetCurrentProcessId 來回傳自己的 ProcessID    之後 exe 與 admin 可以用 ProcessID 作識認,再以 hProcess 來 TerminateProcess    
var
  SI : TStartupInfo;
  PI : TProcessInformation;
begin
  FillChar(SI, SizeOf(SI), 0);
  SI.cb     := SizeOf(SI); 
  CreateProcess(nil,'SplashCount.exe', nil, nil, False,NORMAL_PRIORITY_CLASS, nil, nil, SI,PI);
  xxx := PI.hProcess;
  yyy := PI.dwProcessID;
  .....
  .....
end;      TerminateProcess(xxx,0); // 關掉外部程式    
系統時間:2024-04-28 2:41:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!