为什么用如下代码,有很多系统程序的模块路径无法找到。
我发现那些系统程序,得到的句柄数字都很大而且相同。
请问这么解决
谢谢源代码如下
############################
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.
而且相同的系统程序是正确的,那是系统必需的,此程序
没有什么错误的地方。本人用的是D5。-----------------------------------------------------------------
我是中国鹰派!
拒绝日货!打倒小日本!
up up
up up up
upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
没人能解决吗?
http://www.csdn.net/expert/topic/1090/1090950.xml?temp=.7279169
但我看到"windows优化大师"可以显示进程的完整路径啊?
你可以使用pSAPI.pas,他是封装了PSAPI.DLL,使用它可以得到说有系统进程!
能具体些吗?
最好有源代码