如何由 ProcessID 找出其 ProcessHandle |
答題得分者是:JustinShen
|
rockman326
一般會員 發表:6 回覆:2 積分:1 註冊:2007-02-28 發送簡訊給我 |
以下這段程式是查看目前執行中的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 發送簡訊給我 |
我记得以前我是使用这个函数作的,不知道你可不可以使用。其中的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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |