Delphi 处理不同的结果

Delphi 处理不同的结果,delphi,delphi-2010,Delphi,Delphi 2010,我正在做一个代码来扫描另一个进程内存。但这不是问题所在。要列出正在运行的进程,我将使用Process32First/Process32Next。但是,当我在编译器调试中运行它时,它会得到所有进程(包括其他用户,如系统进程) 但是,当我刚刚运行.exe时,只能从我的用户那里获取进程。下面是代码的延伸部分 Handle:= CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); Struct.dwSize:=Sizeof(TProcessEntry32)

我正在做一个代码来扫描另一个进程内存。但这不是问题所在。要列出正在运行的进程,我将使用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位

您正在以管理权限运行IDE,当您从调试器启动时,您的程序将继承这些权限


除非您的程序需要管理权限,否则您也不需要运行IDE。它应该能够作为普通用户运行,然后您的程序将获得与您单独运行时相同的列表。

似乎只有在os64为真时才初始化proc32。

我想您的问题是为什么会得到不同的结果。你忘了说。我试图用管理员权限运行我的.exe,但仍然得到不同的结果。@user1526124我们看不到你的屏幕,你也没有告诉我们输出的差异。不,在form.create上,我检查操作系统是否为64位。如果不是,我将Proc32变量设置为true,如果是,我将OS64设置为true。我粘贴在这里的过程,如果OS是64,只需更改Proc32变量。。。如果不是,则不进入“如果”,也不更改Proc32。所以,不管怎样,还是继续吧。