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