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

如何由 ProcessID 找出其 ProcessHandle

答題得分者是:JustinShen
rockman326
一般會員


發表:6
回覆:2
積分:1
註冊:2007-02-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-07 12:13:44 IP:59.127.xxx.xxx 訂閱
以下這段程式是查看目前執行中的process,它找出來的是 ProcessID 而用於結束程序時則需要 ProcessHandle,
請問如何由 ProcessID 找出其 ProcessHandle

unit ufMain;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, TLHelp32;

type
TzfMain = class(TForm)
edNote: TMemo;
pnTop: TPanel;
bnList: TButton;
procedure FormCreate(Sender: TObject);
procedure bnListClick(Sender: TObject);
private
procedure ListJob();
public
end;

var
zfMain: TzfMain;

implementation
{$R *.dfm}
procedure TzfMain.FormCreate(Sender: TObject);
begin
//
end;

procedure TzfMain.bnListClick(Sender: TObject);
begin
ListJob();
end;

procedure TzfMain.ListJob();
var
mHPSnap,mHMSnap: integer;
mPE: tagProcessEntry32;
mME: tagModuleEntry32;
mFileName: String;
mCount:integer;
begin
edNote.Lines.Clear();
edNote.Lines.Add('Usage,PricessID,DefaultHeapID,ModuleID,Threads,ParentProcessID,PriClassBase,Flags,ExeFile)');
// 配置獵人 (Snapshot)
mHPSnap:=CreateToolhelp32Snapshot(TH32CS_SnapProcess,0);
if mHPSnap=-1 then
begin
edNote.Lines.Add('建立程序獵人失敗'); exit;
end;
try
// 開始搜尋
mPE.dwSize:=Sizeof(mPE);
if not Process32First(mHPSnap,mPE) then
begin
edNote.Lines.Add('啟動程序搜尋失敗'); exit;
end;
// 顯示
mCount:=0;
repeat
begin
// 取得其 Module 資訊
mFileName:=mPE.szExeFile;
mHMSnap:=CreateToolhelp32Snapshot(TH32CS_SnapModule,mPE.th32ProcessID);
if mHMSnap<>-1 then
begin
try
mME.dwSize:=sizeof(mME);
if Module32First(mHMSnap,mME) then mFileName:=mME.szExePath;
finally
CloseHandle(mHMSnap);
end;
end;
// 顯示
edNote.Lines.Add(
IntToStr(mPE.cntUsage) ',' //
IntToStr(mPE.th32ProcessID) ',' // PID
IntToStr(mPE.th32DefaultHeapID) ',' //
IntToStr(mPE.th32ModuleID) ',' //
IntToStr(mPE.cntThreads) ',' // 執行緒數量
IntToStr(mPE.th32ParentProcessID) ',' // Parent PID
IntToStr(mPE.pcPriClassBase) ',' //
IntToStr(mPE.dwFlags) ',' //
' [' mPE.szExeFile '] [' mFileName ']');
inc(mCount);
end until not Process32Next(mHPSnap,mPE);
finally
CloseHandle(mHPSnap);
end;
edNote.Lines.Add('合計 ' IntToStr(mCount) ' 筆');
end;

end.
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-20 13:18:55 IP:218.93.xxx.xxx 訂閱
我记得以前我是使用这个函数作的,不知道你可不可以使用。其中的pID就是进程ID,返回hProcess应该就是所要的Handle。 <textarea class="delphi" rows="10" cols="60" name="code"> hProcess := OpenProcess( PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, pID ); </textarea>
------
====================
我为一切作努力!
Justin Shen

系統時間:2024-04-27 3:04:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!