Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Планировщик задач  (Прочитано 10354 раз)
0 Пользователей и 1 Гость смотрят эту тему.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« : 11-04-2006 08:13 » 

требуется получить список Sheduled Jobs (не путать с принтерным спулером) и их параметры. (т.е. вытащить оглавление windows\task - не канает!).

насколько я понял из МСДН, это тоже ком объект и к нему есть интерфейс, ITaskManager, но в какой библиотеке типов он объявлен - я не нашёл. ещё есть сервис, shedsvc.exe, который, собсно, и выполняет сами джобы, но как приконнектиться к сервису и есть ли у него какой-то интерфейс, чтобы рулить им со стороны - я тоже не понял.

вот такая задачка Жаль
Записан

zubr
Гость
« Ответ #1 : 11-04-2006 20:08 » 

NetScheduleJobEnum Не понял
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #2 : 11-04-2006 21:39 » 

да, есть такой, чуть позже попробую найти от него *.h в вижуал студио и сделать враппер для дельфей. если больше ничего не останется Жаль
Записан

zubr
Гость
« Ответ #3 : 12-04-2006 04:02 » new

Вот пример работы с NetScheduleJobEnum:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

  AT_INFO = record
    JobTime: DWORD;
    DaysOfMonth: DWORD;
    DaysOfWeek: UCHAR;
    Flags: UCHAR;
   Command: LPWSTR;
  end;

  AT_ENUM = record
    JobId: DWORD;
    JobTime: DWORD;
    DaysOfMonth: DWORD;
    DaysOfWeek: UCHAR;
    Flags: UCHAR;
    Command: LPWSTR;
  end;
  PAT_ENUM = ^AT_ENUM;

  function NetScheduleJobAdd(Servername: PWideChar;
    Buffer: Pointer; var JobId: Cardinal): Cardinal;
    stdcall; external 'netapi32.dll';

  function NetScheduleJobEnum(Servername: PWideChar;
    Buffer: Pointer; BufLength: Cardinal; EntriesRead,
    TotalEntries: PCardinal; var Resumehandle: Cardinal): Cardinal;
    stdcall; external 'netapi32.dll';

  function NetApiBufferFree(Buffer: Pointer): Cardinal;
    stdcall; external 'netapi32.dll';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  ai: AT_INFO;
  JobID, Err: Cardinal;
begin
  ai.JobTime := 50400000;
  ai.DaysOfMonth := 0;
  ai.DaysOfWeek := 0;
  ai.Flags := 0;
  ai.Command := 'C:\file.exe';
  Err := NetScheduleJobAdd(nil, @ai ,JobID);
  if Err <> NO_ERROR then ShowMessage(SysErrorMessage(Err));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Buffer, Tmp: PAT_ENUM;
  BufLength: Cardinal;
  EntriesRead, TotalEntries, Resumehandle, Err: Cardinal;
  I: Integer;
begin
  Resumehandle := 0;
  Err := NetScheduleJobEnum(nil, @Buffer, DWORD(-1),
    @EntriesRead, @TotalEntries, Resumehandle);
  if Err = NO_ERROR then
  try
    Tmp := Buffer;
    for I := 0 to EntriesRead - 1 do
    begin
      Memo1.Lines.Add(Tmp^.Command);
      Tmp := Pointer(Integer(Tmp) + SizeOf(AT_ENUM));
    end;
  finally
    NetApiBufferFree(Buffer);
  end
  else
    ShowMessage(SysErrorMessage(Err));
end;

end.
« Последнее редактирование: 06-12-2007 17:38 от Алексей1153++ » Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 12-04-2006 08:48 » 

zubr, ОГРОМНОЕ спасибо!
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines