Process32Next不同的结果

时间:2012-07-14 21:05:53

标签: delphi delphi-2010

我正在编写代码来扫描另一个进程内存。但这不是问题。列出使用Process32First / Process32Next运行的进程。但是当我在编译器调试中运行它时,它会获得所有进程(包括其他用户,如系统进程) 但是当我刚刚运行.exe时,只能从我的用户那里获取进程。代码的延伸在

之下
 Handle:= CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
 Struct.dwSize:=Sizeof(TProcessEntry32);
 Process32First(Handle, Struct);
   repeat
    Memo2.Lines.Append(Struct.szExeFile);
    MemStart:= 0;
    PID:= Struct.th32ProcessID;
    PIDHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or
                            PROCESS_VM_READ, false, PID);
    if OS64 = true then
     begin
      if IsProcWow64 then
       begin
        Proc32:= true;
      end
     else
       Proc32:= false;
  end;
 if (Proc32 = true) and (POS(Struct.szExeFile, Application.ExeName) = 0) then
      begin
        Memo1.Lines.Append('Process:: '+Struct.szExeFile+' - Scanning');
        CatchYa(Struct.szExeFile);
      end;
  CloseHandle(PIDHandle);
until (not Process32Next(Handle,Struct));

正如您所看到的,我正在检查64位进程,因为我只想要32位。

2 个答案:

答案 0 :(得分:3)

您正在使用管理权限运行IDE,并且当您从调试器启动时,您的程序会继承这些权限。

除非您的程序需要管理权限,否则您也不需要提升IDE。它应该能够以普通用户身份运行,然后您的程序将获得与您自己运行时相同的列表。

答案 1 :(得分:0)

看起来你只在os64为真时初始化proc32。