Ver Mensaje Individual
  #2  
Antiguo 01-02-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
El argumento lpServiceArgVectors no es mas que un array de PChar. Así que no tenemos mas que declarar un array y pasarlo como parámetro. Para esto supongo que podremos declarar un array fijo, uno dinámico, o por las malas utilizando punteros

Esta es la función que aparece en los trucos, pero modificada para admitir parámetros:
Código Delphi [-]
procedure StartSrv(Nombre: String; Params: TStringList);
var
 ServiceControlManager: SC_HANDLE;
 Service: SC_HANDLE;
 ServiceStatus: SERVICE_STATUS;
 Argv, P: ^PChar;
 i: integer;
begin
  ServiceControlManager:= OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
  if ServiceControlManager <> 0 then
  begin
    Service:= OpenService(ServiceControlManager,PChar(Nombre),
      SERVICE_QUERY_STATUS or SERVICE_START);
    if Service <> 0 then
    begin
      if QueryServiceStatus(Service, ServiceStatus) then
      begin
        if ServiceStatus.dwCurrentState <> SERVICE_RUNNING  then
        begin
          if (Params <> nil) and (Params.Count > 0) then
          begin
            GetMem(Argv,Params.Count * Sizeof(PChar));
            try
              P:= Argv;
              for i:= 0 to Params.Count - 1 do
              begin
                P^:= PChar(Params[i]);
                inc(P);
              end;
              StartService(Service,Params.Count,Argv^);
            finally
              FreeMem(Argv);
            end;
          end else
          begin
            Argv:= nil;
            StartService(Service,0,Argv^);
          end;
        end;
      end;
      CloseServiceHandle(Service);
    end;
    CloseServiceHandle(ServiceControlManager);
  end;
end;

// Por ejemplo
var
  Params: TStringList;
begin
  Params:= TStringList.Create;
  try
    Params.Add('Uno');
    Params.Add('Dos');
    Params.Add('Tres');
    StartSrv('Service1',Params);
  finally
    Params.Free;
  end;
end;

Ahora si alguien se anima, que lo implemente con arrays dinámicos

Última edición por seoane fecha: 01-02-2007 a las 17:24:13.
Responder Con Cita