为什么用如下代码,有很多系统程序的模块路径无法找到。
我发现那些系统程序,得到的句柄数字都很大而且相同。
请问这么解决
谢谢源代码如下
############################
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TLHelp32, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; Type
TProcessInfo = Record
ExeFile : String;
ProcessID : DWORD;
End;
pProcessInfo = ^TProcessInfo;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
Var
p : pProcessInfo;
IsLoopContinue:BOOL;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32; FModuleEntry32:TModuleEntry32;
FModuleHandle:THandle;
Begin {1}
memo1.Clear;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); // 创建系统快照
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32); // 必须先设置结构的大小
IsLoopContinue:=Process32First(FSnapshotHandle,FProcessEntry32); //得到第一个进程信息
while Integer(IsLoopContinue)<>0 do
Begin {2}
New(p);
p.ExeFile := FProcessEntry32.szExeFile;
p.ProcessID := FProcessEntry32.th32ProcessID;
//****************************************************************
FModuleHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,FProcessEntry32.th32ProcessID);
FModuleEntry32.dwSize:=Sizeof(FModuleEntry32);
if Module32First(FModuleHandle,FModuleEntry32) then //得到第一个进程信息
memo1.Lines.Add(FModuleEntry32.szexepath);
//****************************************************************
IsLoopContinue:=Process32Next(FSnapshotHandle,FProcessEntry32); // 继续枚举
End; {2}
CloseHandle(FSnapshotHandle); // 释放快照句柄
end;end.
我发现那些系统程序,得到的句柄数字都很大而且相同。
请问这么解决
谢谢源代码如下
############################
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TLHelp32, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; Type
TProcessInfo = Record
ExeFile : String;
ProcessID : DWORD;
End;
pProcessInfo = ^TProcessInfo;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
Var
p : pProcessInfo;
IsLoopContinue:BOOL;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32; FModuleEntry32:TModuleEntry32;
FModuleHandle:THandle;
Begin {1}
memo1.Clear;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); // 创建系统快照
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32); // 必须先设置结构的大小
IsLoopContinue:=Process32First(FSnapshotHandle,FProcessEntry32); //得到第一个进程信息
while Integer(IsLoopContinue)<>0 do
Begin {2}
New(p);
p.ExeFile := FProcessEntry32.szExeFile;
p.ProcessID := FProcessEntry32.th32ProcessID;
//****************************************************************
FModuleHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,FProcessEntry32.th32ProcessID);
FModuleEntry32.dwSize:=Sizeof(FModuleEntry32);
if Module32First(FModuleHandle,FModuleEntry32) then //得到第一个进程信息
memo1.Lines.Add(FModuleEntry32.szexepath);
//****************************************************************
IsLoopContinue:=Process32Next(FSnapshotHandle,FProcessEntry32); // 继续枚举
End; {2}
CloseHandle(FSnapshotHandle); // 释放快照句柄
end;end.
===================================================void __fastcall TForm1::ListProcessModule(DWORD dwProcessId)
{
HANDLE hSnapshot;
HANDLE hProcess;
MODULEENTRY32 ModEntry32;
bool Result; ModLV->Items->BeginUpdate();
ModLV->Items->Clear(); hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,dwProcessId); hSnapshot = CreateToolhelp32Snapshot((DWORD)TH32CS_SNAPMODULE,dwProcessId); ModEntry32.dwSize = sizeof(MODULEENTRY32);
Result = Module32First(hSnapshot,&ModEntry32);
while(Result)
{
if(ModEntry32.th32ProcessID != dwProcessId)
continue; TListItem *Item = ModLV->Items->Add(); //摸块名
Item->Caption = AnsiString(ModEntry32.szExePath); //入口地址(摸块句柄)
Item->SubItems->Add(IntToHex((int)ModEntry32.hModule,8)); //基地址,EntryPoint就是模块的入口点,从这个地方开始读
MODULEINFO mi; GetModuleInformation(hProcess,ModEntry32.hModule,&mi,sizeof(MODULEINFO));
Item->SubItems->Add(IntToHex((int)mi.EntryPoint,8)); //占用内存
Item->SubItems->Add(IntToStr(ModEntry32.modBaseSize / 1024) + " K"); Result = Module32Next(hSnapshot,&ModEntry32);
}
CloseHandle(hSnapshot);
CloseHandle(hProcess); ModLV->Items->EndUpdate();
}
//---------------------------------------------------------------------------
我也都好几个月不爱来了,没径还有字体,怎么还是这样啊,
爱回复者回复,不爱回复者拍拍屁股看了就走人
>>>>>>>>>>>> 网络无限自由 <<<<<<<<<<<<<
你可以到搜索引擎上看看