Delphi 如何获取远程运行进程的列表?

Delphi 如何获取远程运行进程的列表?,delphi,process,Delphi,Process,如何使用Delphi通过网络获取其他机器上运行的进程列表?您可以使用该类 检查一下这个样品 {$APPTYPE CONSOLE} uses SysUtils, ActiveX, ComObj, Variants; procedure GetWin32_ProcessInfo; const WbemUser ='';//set the user name to log in WbemPassword ='';//set the pa

如何使用Delphi通过网络获取其他机器上运行的进程列表?

您可以使用该类

检查一下这个样品

{$APPTYPE CONSOLE}
uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;


procedure  GetWin32_ProcessInfo;
const
  WbemUser            ='';//set the user name to log in
  WbemPassword        ='';//set the password
  WbemComputer        ='localhost';//set the name of the remote machine or IP address
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_Process','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('Name         %s',[String(FWbemObject.Name)]));// String
    Writeln(Format('ProcessId    %d',[Integer(FWbemObject.ProcessId)]));// Uint32
    Writeln;
    FWbemObject:=Unassigned;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      GetWin32_ProcessInfo;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;
end.
为了在远程计算机中使用WMI,必须设置防火墙和DCOM设置。有关详细信息,请查看这些文章

你可以使用这个类

检查一下这个样品

{$APPTYPE CONSOLE}
uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;


procedure  GetWin32_ProcessInfo;
const
  WbemUser            ='';//set the user name to log in
  WbemPassword        ='';//set the password
  WbemComputer        ='localhost';//set the name of the remote machine or IP address
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_Process','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('Name         %s',[String(FWbemObject.Name)]));// String
    Writeln(Format('ProcessId    %d',[Integer(FWbemObject.ProcessId)]));// Uint32
    Writeln;
    FWbemObject:=Unassigned;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      GetWin32_ProcessInfo;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;
end.
为了在远程计算机中使用WMI,必须设置防火墙和DCOM设置。有关详细信息,请查看这些文章



请参阅TlHelp32单元中的EnumProcesses过程。

请参阅TlHelp32单元中的EnumProcesses过程。

您已经想到或尝试过什么?请详细说明并显示一些源代码。。。另一台机器的操作系统是什么Unix、Linux、OSX、Windows?你们有什么样的网络接入方式?中间有防火墙等吗?你试过什么?什么不起作用?请检查此处的链接以了解详细信息代码您想到了什么或已经尝试了什么?请详细说明并显示一些源代码。。。另一台机器的操作系统是什么Unix、Linux、OSX、Windows?你们有什么样的网络接入方式?中间有防火墙等吗?你试过什么?什么不起作用?请检查此处的链接以了解详细信息代码EnumProcess不能跨机器边界工作,是吗?不。您需要编写一个单独的程序在远程机器上运行,然后它可以枚举该机器的本地进程,并使远程应用程序可以访问该列表。@Remy:这就是我问的原因。我想知道Stijn是否知道一些我不知道的关于EnumProcess的事情,因为这个问题是关于网络上的其他机器的。tss,我不应该在午夜后发帖,我完全错过了“通过网络”的部分。。。可惜这些都不是开源的:EnumProcess不能跨机器边界工作,是吗?不。你需要编写一个单独的程序在远程机器上运行,然后它可以枚举该机器的本地进程,并使远程应用程序可以访问该列表。@Remy:这就是我问的原因。我想知道Stijn是否知道一些我不知道的关于EnumProcess的事情,因为这个问题是关于网络上的其他机器的。tss,我不应该在午夜后发帖,我完全错过了“通过网络”的部分。。。可惜这些都不是开源的:现在我有另一个问题。。。网络上的热杀戮进程?现在我有另一个问题。。。网络上的热杀戮进程?Thnx: