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

獲取process 下的所有object handle

答題得分者是:anyone
waterful0
一般會員


發表:7
回覆:12
積分:3
註冊:2006-07-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-14 11:18:34 IP:210.68.xxx.xxx 訂閱
問題如下:
在取得process id 或process handle 後,我想取得在這process 內所使用到的所有 object handle, 那麼我應該要用什麼 api或是方法來取得呢?


舉例來說:
process A 開啟了一個 a.tmp 的檔案(非共享模式),此時process B 列舉了系統所有的process, 並取得了process A的 id 及handle , 那麼接下來要如何取得process A 開啟 a.tmp 的handle呢?

類似 processXp.exe之類的功能。


感謝。
編輯記錄
waterful0 重新編輯於 2007-08-14 11:19:24, 註解 無‧
anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-14 11:58:21 IP:59.127.xxx.xxx 未訂閱
列取所有Handle用GetParent看看它的Parent是否為A
或是PID去判斷是否相同的,就抓出來
若這兩者都無法的話,那可能得由FindWindow去尋找了。
===================引 用 waterful0 文 章===================
問題如下:
在取得process id 或process handle 後,我想取得在這process 內所使用到的所有 object handle, 那麼我應該要用什麼 api或是方法來取得呢?


舉例來說:
process A 開啟了一個 a.tmp 的檔案(非共享模式),此時process B 列舉了系統所有的process, 並取得了process A的 id 及handle , 那麼接下來要如何取得process A 開啟 a.tmp 的handle呢?

類似 processXp.exe之類的功能。


感謝。
編輯記錄
anyone 重新編輯於 2007-08-14 12:00:07, 註解 無‧
waterful0
一般會員


發表:7
回覆:12
積分:3
註冊:2006-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-14 14:34:37 IP:220.132.xxx.xxx 訂閱
procedure TForm1.Button1Click(Sender: TObject);
var
fs: Tfilestream;
begin
fs:= TfileStream.Create(edit1.Text, fmOpenReadWrite);
try

label1.Caption := format('processID =%d, handle =%d, form Handle =%d',[GetCurrentProcessID(), application.Handle, handle]);
label2.Caption := format('fs.Handle =%d',[fs.Handle]);
memo1.Lines.Add(format('Parent Handle =%d',[GetParent(fs.Handle)]));
showmessage('stop');
finally
fs.Free;
fs:= nil;
end;

end; <!-- @ --> <!-- @ --> //<!-- var gbDBG = false; //--> //<!-- var gsHTCPath = "../../../../../code/"; //--> //<!-- var gsContextMenuPath = gsHTCPath "contextmenu.htc"; var gsCodeDecoPath = gsHTCPath "codedeco.htc"; var gsStoreName="winui"; var gsGraphicsPath = "/winui/graphics/"; //--> //<!-- //--> //<!-- //--> //<!-- function InitPage() { if (!assert( (typeof(oBD) == 'object' && oBD != null), "browdata object unavailable!") ) { return; } if ("MSIE" == oBD.browser && oBD.majorVer >= 5 && (oBD.platform.toLowerCase()!="x" && oBD.platform!="Mac" && oBD.platform!="PPC" )) { if (typeof(PreInit) == 'function') PreInit(); if (typeof(PostGBInit) == 'function') PostGBInit(); if (typeof(PostInit) == 'function') PostInit(); if (typeof(initTabbedMembers) == 'function') initTabbedMembers(); if (typeof(hideExamples) == 'function') hideExamples(); } if (oBD.getsNavBar && oBD.platform!="PPC" ) { if (typeof(SetShowMes) == 'function') SetShowMes(); } } function assert(bCond, sMsg) { if (bCond) { return true; } else { if (gbDBG) { alert(sMsg); } return false; } } = InitPage; //-->
<xml id="_topicdata" pagetype="function" proj="WinUIHXS" name="GetParent" pubpath="/winui/WindowsUserInterface/Windowing/Windows/WindowReference/WindowFunctions/GetParent.htm"><!-- topic data --></xml><br /> <xml xmlns:mshelp="http://msdn.microsoft.com/mshelp"><mshelp:keyword index="A" term="_win32_GetParent"></xml> <!-- @ --> <!-- @ --> //<!-- var gbDBG = false; //--> //<!-- var gsHTCPath = "../../../../../code/"; //--> //<!-- var gsContextMenuPath = gsHTCPath "contextmenu.htc"; var gsCodeDecoPath = gsHTCPath "codedeco.htc"; var gsStoreName="winui"; var gsGraphicsPath = "/winui/graphics/"; //--> //<!-- //--> //<!-- //--> //<!-- function InitPage() { if (!assert( (typeof(oBD) == 'object' && oBD != null), "browdata object unavailable!") ) { return; } if ("MSIE" == oBD.browser && oBD.majorVer >= 5 && (oBD.platform.toLowerCase()!="x" && oBD.platform!="Mac" && oBD.platform!="PPC" )) { if (typeof(PreInit) == 'function') PreInit(); if (typeof(PostGBInit) == 'function') PostGBInit(); if (typeof(PostInit) == 'function') PostInit(); if (typeof(initTabbedMembers) == 'function') initTabbedMembers(); if (typeof(hideExamples) == 'function') hideExamples(); } if (oBD.getsNavBar && oBD.platform!="PPC" ) { if (typeof(SetShowMes) == 'function') SetShowMes(); } } function assert(bCond, sMsg) { if (bCond) { return true; } else { if (gbDBG) { alert(sMsg); } return false; } } = InitPage; //-->
<xml id="_topicdata" pagetype="function" proj="WinUIHXS" name="GetParent" pubpath="/winui/WindowsUserInterface/Windowing/Windows/WindowReference/WindowFunctions/GetParent.htm"><!-- topic data --></xml><br /> <xml xmlns:mshelp="http://msdn.microsoft.com/mshelp"><mshelp:keyword index="A" term="_win32_GetParent"></xml>

//感謝您的回覆,但GetParent 似乎只能對視窗起作用
編輯記錄
waterful0 重新編輯於 2007-08-14 14:35:24, 註解 無‧
anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-14 17:37:54 IP:59.127.xxx.xxx 未訂閱
對,GetParent 似乎只能對視窗起作用
若你要找xxx.exe之類的
就用PID的方法,去找尋它的Parent PID做比對
找xxx.exe的方法用一下搜尋就可以找到
===================引 用 waterful0 文 章===================
procedure TForm1.Button1Click(Sender: TObject);
var
? fs: Tfilestream;
begin
? fs:= TfileStream.Create(edit1.Text, fmOpenReadWrite);
? try

??? label1.Caption := format('processID =%d, handle =%d, form Handle =%d',[GetCurrentProcessID(), application.Handle, handle]);
??? label2.Caption := format('fs.Handle =%d',[fs.Handle]);
??? memo1.Lines.Add(format('Parent Handle =%d',[GetParent(fs.Handle)]));
??? showmessage('stop');
? finally
??? fs.Free;
??? fs:= nil;
? end;

end; <!-- @ --><!-- @ --> //<!-- var gbDBG = false; //--> //<!-- var gsHTCPath = "../../../../../code/"; //--> //<!-- var gsContextMenuPath = gsHTCPath "contextmenu.htc"; var gsCodeDecoPath = gsHTCPath "codedeco.htc"; var gsStoreName="winui"; var gsGraphicsPath = "/winui/graphics/"; //--> //<!-- //--> //<!-- //--> //<!-- function InitPage() { if (!assert( (typeof(oBD) == 'object' && oBD != null), "browdata object unavailable!") ) { ????return; } if ("MSIE" == oBD.browser && oBD.majorVer >= 5 && (oBD.platform.toLowerCase()!="x" && oBD.platform!="Mac" && oBD.platform!="PPC" )) { ????if (typeof(PreInit) == 'function') PreInit(); ????if (typeof(PostGBInit) == 'function') PostGBInit(); ????if (typeof(PostInit) == 'function') PostInit(); ????if (typeof(initTabbedMembers) == 'function') initTabbedMembers(); ????if (typeof(hideExamples) == 'function') hideExamples(); } if (oBD.getsNavBar && oBD.platform!="PPC" ) { ????if (typeof(SetShowMes) == 'function') SetShowMes(); } } function assert(bCond, sMsg) { if (bCond) { return true; } else { if (gbDBG) { alert(sMsg); } return false; } } = InitPage; //-->
<!--Element not supported - Type: 9 Name: #document-->
<!--Element not supported - Type: 9 Name: #document-->
系統時間:2024-05-19 23:27:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!