为什么用如下代码,有很多系统程序的模块路径无法找到。
我发现那些系统程序,得到的句柄数字都很大而且相同。
请问这么解决
谢谢源代码如下
############################
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.

解决方案 »

  1.   

    本人试了一下,Variants可以不用;得到很多句柄数字大
    而且相同的系统程序是正确的,那是系统必需的,此程序
    没有什么错误的地方。本人用的是D5。-----------------------------------------------------------------
    我是中国鹰派!
    拒绝日货!打倒小日本!
      

  2.   

    up
    up up
    up up up
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    没人能解决吗?
      

  3.   

    没作过这个东东大家到这里看看:
    http://www.csdn.net/expert/topic/1090/1090950.xml?temp=.7279169
      

  4.   

    up
    但我看到"windows优化大师"可以显示进程的完整路径啊?
      

  5.   

    你在NT内核的OS下不能得到的所以系统进程,那是TLHelp32的问题,和你程序没有关系!
    你可以使用pSAPI.pas,他是封装了PSAPI.DLL,使用它可以得到说有系统进程!
      

  6.   

    TO: phoex(后羿) 
    能具体些吗?
    最好有源代码