this slowpoke moves

Read all Services

uses WinSvc

const
  SERVICE_KERNEL_DRIVER       = $00000001;
  SERVICE_FILE_SYSTEM_DRIVER  = $00000002;
  SERVICE_ADAPTER             = $00000004;
  SERVICE_RECOGNIZER_DRIVER   = $00000008;

  SERVICE_DRIVER              =
    (SERVICE_KERNEL_DRIVER or
     SERVICE_FILE_SYSTEM_DRIVER or
     SERVICE_RECOGNIZER_DRIVER);

  SERVICE_WIN32_OWN_PROCESS   = $00000010;
  SERVICE_WIN32_SHARE_PROCESS = $00000020;
  SERVICE_WIN32               =
    (SERVICE_WIN32_OWN_PROCESS or
     SERVICE_WIN32_SHARE_PROCESS);

  SERVICE_INTERACTIVE_PROCESS = $00000100;

  SERVICE_TYPE_ALL            =
    (SERVICE_WIN32 or
     SERVICE_ADAPTER or
     SERVICE_DRIVER  or
     SERVICE_INTERACTIVE_PROCESS);
     
 //
 
 function ServiceGetList(
  sMachine : string;
  dwServiceType,
  dwServiceState : DWord;
  slServicesList : TStrings )
  : boolean;
const
  cnMaxServices = 4096;

type
  TSvcA = array[0..cnMaxServices]
          of TEnumServiceStatus;
  PSvcA = ^TSvcA;

var
  j : integer;
  schm          : SC_Handle;
  nBytesNeeded,
  nServices,
  nResumeHandle : DWord;
  ssa : PSvcA;
begin
  Result := false;

  schm := OpenSCManager(
    PChar(sMachine),
    Nil,
    SC_MANAGER_ALL_ACCESS); 

  if(schm > 0)then 
  begin
    nResumeHandle := 0;
    New(ssa);
    EnumServicesStatus( 
      schm,
      dwServiceType, 
      dwServiceState,
      ssa^[0], 
      SizeOf(ssa^),
      nBytesNeeded, 
      nServices,
      nResumeHandle ); 

    for j := 0 to nServices-1 do 
    begin
      slServicesList. 
        Add( StrPas(
          ssa^[j].lpDisplayName ) ); 
    end;

    Result := true;
    Dispose(ssa); 

    // close service control 
    // manager handle
    CloseServiceHandle(schm); 
  end;
end;
Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
begin
ServiceGetList( '',
  SERVICE_WIN32,
  SERVICE_STATE_ALL,
  ListBox1.Items )
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate