Delphi - A Feladatütemező programozása Delphi-ből

ITaskScheduler 3. rész

forráskód letöltése
A Feladatütemező programozásáról szóló cikksorozat harmadik részében a feladatok további tulajdonságainak lekérdezését és beállítását nézzük meg. Többek között szó lesz arról is, hogy hogyan tudunk egy adott feladatot elindítani, vagy leállítani. Megtudhatjuk azt is, hogy a feladat mikor futott utoljára, és mikor fog legközelebb, de még azt is, hogy egy adott időintervallumban mely időpontokban futott.
Amikor az Activate függvénnyel lekérdezzük a feladat objektumát, akkor egy ITask interfészt kapunk. Ez az interfész az IScheduledWorkItem interfészből származik. Ebben a cikkben ennek a függvényeit vesszük sorra.
GetRunTimes
Osztály: IScheduledWorkItem
function GetRunTimes(
const pstBegin: TSystemTime;
const pstEnd: TSystemTime;
out pCount: WORD;
out rgstTaskTimes: TSystemTime
): HRESULT;
Lekérdezi azokat az időpontokat, amikor a taszk futott, egy megadott időintervallumon belül.
Paraméterek
const pstBegin: TSystemTime
A kezdés időpontja egy TSystemTime struktúrában. Ezt minden esetben meg kell adni.
const pstEnd: TSystemTime
A befejezés időpontja szintén TSystemTime struktúrában. Nem kötelező megadni, lehet nil is.
out pCount: WORD
A lekérdezendő időpontok számát adhatjuk meg a paraméterben. Ugyanebben a paraméterben kapjuk meg a kapott eredmények számát. Az értékének 1 és TASK_MAX_RUN_TIMES közé kell esnie.
out rgstTaskTimes: TSystemTime
Pointer egy TSystemTime típusú elemeket tartalmazó tömbre. A tömb és az elemek által foglalt területet feldolgozás után fel kell szabadítani a CoTaskMemFree függvénnyel.
Visszatérési érték
A szokásos értékeken kívül az alábbiak lehetnek:
  • S_FALSE: a függvény lefutott, de a kérdezettnél kevesebb időpontot tudott csak visszaadni. A lekérdezett időtartamok számát a pCount paraméterben kapjuk vissza. Ha ennek értéke 0, akkor nincs megadva olyan esemény, ami kiváltaná a program futását.
  • SCHED_S_EVENT_TRIGGER: nem volt olyan esemény, ami a megadott időintervallumban kiváltotta volna a program futását.
  • SCHED_S_TASK_NO_VALID_TRIGGERS: a feladat engedélyezve van, de nincs egyetlen érvényes esemény bejegyzése sem, aminek hatására a program indulna.
  • SCHED_S_TASK_DISABLED: a feladat le van tiltva.
GetNextRunTime
Osztály: IScheduledWorkItem
function GetNextRunTime(
out pstNextRun: TSystemTime
): HRESULT;
Lekérdezi, hogy az adott feladat mikor lesz legközelebb elindítva. Az időpontot egy TSystemTime struktúrában kapjuk meg.
Paraméterek
out pstNextRun: TSystemTime
A legközelebbi indítás időpontja.
SetIdleWait
Osztály: IScheduledWorkItem
function SetIdleWait(
wIdleMinutes: WORD;
wDeadlineMinutes: WORD
): HRESULT;
A függvény segítségével megadhatjuk azt az időtartamot, amennyi ideig a rendszernek „üresjáratban” kell lennie a feladat elindításához. Ez azt jelenti, hogy a feladat csak abban az esetben indul el, ha ennyi ideig nem dolgozik senki a gépen.
Paraméterek
wIdleMinutes: WORD
Az alkalmazás indítása előtti üresjárati idő percben.
wDeadlineMinutes: WORD
Ha a rendszer nincs annyi ideig üresjáratban, mint amennyit megadtunk a wIdleMinutes paraméterben, akkor az ebben a paraméterben megadott ideig próbálkozik újra. Ezt az időtartamot is percben kell megadni.
GetIdleWait
Osztály: IScheduledWorkItem
function GetIdleWait(
out pwIdleMinutes: WORD;
out pwDeadlineMinutes: WORD
): HRESULT;
Lekérdezi azt az időtartamot, amennyi ideig a rendszernek üresjáratban kell lennie, mielőtt a feladatot elindítaná.
Paraméterek
out pwIdleMinutes: WORD
Az alkalmazás indítása előtti üresjárati idő percben.
out pwDeadlineMinutes: WORD
Ha a rendszer nincs annyi ideig üresjáratban, mint amennyit megadtunk a wIdleMinutes paraméterben, akkor az ebben a paraméterben megadott ideig próbálkozik újra. Ezt az időtartamot is percben kell megadni.
Run
Osztály: IScheduledWorkItem
function Run: HRESULT;
Ezzel a függvénnyel futtathatjuk az adott feladatot.
Terminate
Osztály: IScheduledWorkItem
function Terminate: HRESULT;
A feladat futását ezzel a függvénnyel szakíthatjuk meg.
EditWorkItem
Osztály: IScheduledWorkItem
function EditWorkItem(
hParent: HWND;
dwReserved: DWORD
): HRESULT;
Megjeleníti a feladat beállítási ablakát. Ebben az ablakban állíthatja be a felhasználó a feladat minden tulajdonságát.
Paraméterek
hParent: HWND
A hívó alkalmazás ablakának azonosítója.
dwReserved: DWORD
Későbbi fejlesztésekhez fenntartott paraméter, jelenleg nem használt.
GetMostRecentRunTime
Osztály: IScheduledWorkItem
function GetMostRecentRunTime(
out pstLastRun: TSystemTime
): HRESULT;
Lekérdezi a feladat legutóbbi futtatásának időpontját.
Paraméterek
out pstLastRun: TSystemTime
Ebben a paraméterben kapjuk meg az időpontot.
Visszatérési érték
Ha a visszatérési érték SCHED_S_TASK_HAS_NOT_RUN, akkor a feladat még nem volt futtatva.
GetStatus
Osztály: IScheduledWorkItem
function GetStatus(
out phrStatus: HRESULT
): HRESULT;
Lekérdezi a feladat állapotát.
Paraméterek
out phrStatus: HRESULT
Ebben a változóban kapjuk meg a jelenlegi állapotot. Értékei az alábbiak lehetnek:
  • SCHED_S_TASK_READY: a feladat készen áll a futásra a legközelebbi megadott időpontban;
  • SCHED_S_TASK_RUNNING: a feladat jelenleg éppen fut;
  • SCHED_S_TASK_NOT_SCHEDULED: a feladat nincs ütemezve, a legközelebbi futtatás időpontja nincs meghatározva.
GetExitCode
Osztály: IScheduledWorkItem
function GetExitCode(
out pdwExitCode: DWORD
): HRESULT;
A feladat által a legutóbbi futtatásakor visszaadott érték.
Paraméterek
out pdwExitCode: DWORD
Ebben a paraméterben kapjuk meg a legutóbbi visszatérési értéket.
Visszatérési érték
Ha a feladat még nem futott, akkor a visszatérési érték SCHED_S_TASK_HAS_NOT_RUN.
SetComment
Osztály: IScheduledWorkItem
function SetComment(
pwszComment: PWideChar
): HRESULT;
Ezzel a függvénnyel egy tetszőleges megjegyzést fűzhetünk hozzá a feladathoz.
Paraméterek
pwszComment: PWideChar
Ebben a paraméterben adhatjuk meg a megjegyzés szövegét.
GetComment
Osztály: IScheduledWorkItem
function GetComment(
out ppwszComment: PWideChar
): HRESULT;
A feladathoz fűzött megjegyzés lekérdezésére szolgál ez a függvény.
Paraméterek
out ppwszComment: PWideChar
Ebben a paraméterben kapjuk meg a megjegyzés szövegét.
SetCreator
Osztály: IScheduledWorkItem
function SetCreator(
pwszCreator: PWideChar
): HRESULT;
A feladat létrehozójának nevét adhatjuk meg ezzel a függvénnyel.
Paraméterek
pwszCreator: PWideChar
A feladat létrehozójának neve.
GetCreator
Osztály: IScheduledWorkItem
function GetCreator(
out ppwszCreator: PWideChar
): HRESULT;
A feladat létrehozójának nevét kérdezhetjük le a függvénnyel.
Paraméterek
out ppwszCreator: PWideChar
Ebben a paraméterben kapjuk meg a nevet.
SetWorkItemData
Osztály: IScheduledWorkItem
function SetWorkItemData(
cbData: WORD;
var rgbData: BYTE
): HRESULT;
Ezzel a függvénnyel tetszőleges adatokat rendelhetünk a feladathoz.
Paraméterek
cbData: WORD
Az adatok hossza bájtban. A terület lefoglalását és felszabadítását is a hívó alkalmazás végzi el.
var rgbData: BYTE
Az adatok címe.
GetWorkItemData
Osztály: IScheduledWorkItem
function GetWorkItemData(
out pcbData: WORD;
out prgbData: BYTE
): HRESULT;
Lekérdezi a feladathoz rendelt adatbájtokat.
Paraméterek
out pcbData: WORD
Ebben a paraméterben kapjuk meg az adatok hosszát bájtban.
out prgbData: BYTE
Ebben a paraméterben kapjuk meg az adatok címét. A területet a feldolgozás után fel kell szabadítani a CoTaskMemFree függvénnyel.
SetFlags
Osztály: IScheduledWorkItem
function SetFlags(
dwFlags: DWORD
): HRESULT;
Ezzel a függvénnyel a feladat viselkedését befolyásoló flag-eket adhatjuk meg.
Paraméterek
dwFlags: DWORD
Ebben a paraméterben adhatjuk meg a tulajdonságokat az alábbi konstansokkal:
Konstans Leírás
TASK_FLAG_INTERACTIVE konvertálja az NT szerviz feladatot Ütemezett feladattá. Ezek a feladatok eredetileg az AT.exe parancssoros programmal ütemezhetők, ami csak a régebbi WIndows NT verzókkal való kompatibilitás miatt maradt meg.
TASK_FLAG_DELETE_WHEN_DONE a feladat törölve lesz, ha már nincs olyan időpont, amikor újra kellene indítani.
TASK_FLAG_DISABLED ezzel a tulajdonsággal ideiglenesen letilthatjuk a feladatot.
TASK_FLAG_HIDDEN a feladat futás közben is rejtve marad, a felhasználó nem látja az alkalmazás ablakát.
TASK_FLAG_RUN_ONLY_IF_LOGGED_ON a feladat csak akkor indul el, ha a megadott felhasználók be vannak jelentkezve.
TASK_FLAG_START_ONLY_IF_IDLE csak Windows’95 esetén használható. Azt határozza meg, hogy a feladat csak akkor indulhat el, amikor a rendszer üresjáratban van.
TASK_FLAG_KILL_ON_IDLE_END a feladat befejeződik, ha a rendszer üresjárata megszűnik. Csak Windows’95-nél használható.
TASK_FLAG_RESTART_ON_IDLE_RESUME a feladat folytatja a futást, miután újból üresjáratba került a rendszer. Általában a TASK_FLAG_KILL_ON_IDLE_END tulajdonsággal együtt van használva. Csak Windows’95-nél használható.
TASK_FLAG_DONT_START_IF_ON_BATTERIES a feladat nem indul el, amikor a számítógép akkumulátorról működik. Csak Windows’95.
TASK_FLAG_KILL_IF_GOING_ON_BATTERIES a feladat befejeződik, ha a számítógép akkumulátoros üzemmódba vált. Csak Windows’95.
TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET a feladat csak akkor indul el, ha van aktív Internet kapcsolat. Ez a tulajdonság jelenleg még nincs implementálva.
GetFlags
Osztály: IScheduledWorkItem
function GetFlags(
out pdwFlags: DWORD
): HRESULT;
A feladat tulajdonságait kérdezi le.
Paraméterek
out pdwFlags: DWORD
Ebben a paraméterben kapjuk meg a tulajdonságokat. A lehetséges értékeket konstansokkal azonosíthatjuk (lásd. SetFlags függvény).

ITaskScheduler cikksorozat