DELPHI – Obtener el listado de tareas programadas usando la api Task Scheduler

Hace varios días publiqué una entrada donde mostré cómo puede modificarse el nivel de prioridad de una tarea programada en Windows 2008. Al ver lo sencillo que es y pensando en que desde un enfoque de programación muchas veces necesitamos crear tareas programadas desde nuestras aplicaciones decidí investigar un poco más y me encontré con que Microsoft proporciona una API que nos permite consultar información de las tareas programadas y/o  en su caso programarlas. La documentación del API que está en su versión 2.0 puede consultarse desde el siguiente enlace: Task Scheduler.

Para mostrar cómo usarla me decidí a crear un  ejemplo con el que podemos obtener el listado de tareas programadas en Windows haciendo uso de la función GetTasks como puede observarse en la siguiente imagen:

 

Para replicar este ejemplo solo debes ejecutar Delphi XE crear una nueva aplicación y colocar un ListView con su propiedad ViewStyle en Report y en el evento OnCreate del formulario agregar el siguiente Código:

 

procedure TFormulario.FormCreate(Sender: TObject);
var
  service,rootfolder,taskCollection,RegisteredTask:Olevariant;
  numberOfTasks: Integer;
begin
  service:=CreateOleObject('Schedule.Service');
  service.connect;
  rootfolder:=service.GetFolder(Olevariant('\'));
  taskCollection := rootFolder.GetTasks(0);
  numberOfTasks := taskCollection.Count;
  for numberOfTasks:= 1 To taskCollection.Count  do
    begin
      RegisteredTask := taskCollection.item[numberOfTasks];
      With ListView1.Items.Add Do
        Begin
          Caption := RegisteredTask.name;
          case RegisteredTask.State of
            0: SubItems.Add('Desconocido');
            1: SubItems.Add('Deshabilitado');
            2: SubItems.Add('En espera');
            3: SubItems.Add('Listo');
            4: SubItems.Add('En ejecución');
          end;
          SubItems.Add(RegisteredTask.LastRunTime);
          SubItems.Add(RegisteredTask.LastTaskResult);
        End;
    end;
end;

O si lo deseas puedes descargar el código aquí.

Sé el primero en comentar

Deja un comentario