線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1641
推到 Plurk!
推到 Facebook!

GetProcessHndByPID 應用問題

答題得分者是:AndrewK
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-28 13:51:52 IP:220.132.xxx.xxx 訂閱
  if CreateProcess(PChar(Exe_name), PChar(' ' + ARG_STR), nil, nil, true, DETACHED_PROCESS, nil, nil, SI, PI) then
begin
WaitForInputIdle(PI.hProcess, INFINITE);
repeat
twnd := FindMainWindow(PI.dwProcessID);
until twnd > 0;
RHandle := twnd;
end;

我將RHandle這個值存放到DB TABLE後,想要在後續操作,
RHandle := GetProcessHndByPID(strtoint(self.TB_NettermWindowsProcessID.FieldByName('NWPID').Text));
P.S.:我發現使用GetProcessHndByPID的值怎麼都是0
GetProcessHndByPID我是參考chris_shieh前輩所撰寫的「Program Name、PID、Window Handle、hProcess 的轉換函式」
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=61654

想透過下列的方式將Netterm視窗標題改變成我需要的資訊,但是一直無法取得正確的
SetWindowText(strtoint(self.TB_NettermWindowsProcessID.FieldByName('NWPID').Text), PChar(trim(self.TB_NettermWindowsProcessID.FieldByName('TiTle').Text)));
但是我發現一直無法取得正確的RHandle,不知道
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
AndrewK
高階會員


發表:6
回覆:151
積分:161
註冊:2006-10-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-15 09:03:38 IP:203.67.xxx.xxx 訂閱
http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=35055
這一篇文章討論為有關於 Process Handle And PID 資訊
------
Just Do It
-------------------------
其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。
ralph
初階會員


發表:41
回覆:82
積分:29
註冊:2003-02-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-18 02:12:21 IP:64.217.xxx.xxx 未訂閱
稍微拜讀chris_shieh, 對於其中一行有問題
[code cpp]
// Get Process Handle By Window Handle
function GetProcessHndByHWnd(const hWnd: THandle): THandle;
var
PID: DWORD;
AhProcess: THandle;
begin
if hWnd<>0 then
begin
GetWindowThreadProcessID(hWnd, @PID);
Result:=GetProcessHndByPID(PID);
end
else
Result:=0;
end;

// Get Process Handle By Process ID
function GetProcessHndByPID(const hAPID: THandle): THandle;
var
AhProcess: THandle;
begin
if hAPID<>0 then
begin
AhProcess := OpenProcess(PROCESS_ALL_ACCESS, false, hAPID);
Result:=AhProcess;
CloseHandle(AhProcess); <== Question?
end
else
Result:=0;
end;


[/code]

你可以試著用try ... catch去抓error, 用getlasterror去得到內容(Sorry, 我用c language 回答你, 我要去查delphi用什麼去catch error).

在藍色部分, 我懷疑CloseHandle 把AhProcess released, 你可試試放"{}", 在run看看.

你可以試試以上2種方法.
編輯記錄
ralph 重新編輯於 2008-07-18 02:13:17, 註解 無‧
系統時間:2024-04-23 18:43:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!