Windows NT alatt a Feladatütemező szerviz alkalmazásként fut, míg Windows 9x esetén önálló taszkként. Ez azt jelenti, hogy mindkét operációs rendszeren másképpen kell lekérdezni, hogy a feladatütemező már fut-e, és másképpen kell elindítani, illetve leállítani is.
Először tehát mindenképpen meg kell vizsgálni, hogy milyen operációs rendszeren fut a program. Ezt a GetOsVersion függvénnyel tehetjük meg. Ez a függvény egy TOSVersionInfo típusú struktúrát tölt fel adatokkal. Nekünk ennek a struktúrának csak a dwPlatformId mezőjére lesz szükségünk, ebből ugyanis kiolvashatjuk, hogy milyen Windows platformmal van dolgunk (Win 9x, NT). Ha a mező értéke megegyezik a VER_PLATFORM_WIN32_WINDOWS konstans értékével, akkor Windows 9x-n fut (95, 98, ME) a program. Ebben az esetben a Feladatütemezőt egyszerű process-ként kell futtatnunk, ami az alábbi módon történhet:
A FindWindow függvénnyel lekérdezzük a Feladatütemező ablakának leíróját. Ehhez szükség van az ablak nevére vagy az ablak osztályának nevére. Mi mindkettőt megadjuk, ezért a megfelelő értékeket, a program és a szerviz nevével együtt konstansként deklaráljuk.
SCHED_CLASS = 'SAGEWINDOWCLASS';
SCHED_TITLE = 'SYSTEM AGENT COM WINDOW';
SCHED_SERVICE_APP_NAME = 'mstask.exe';
SCHED_SERVICE_NAME = 'Schedule';
Ha a függvény visszatérési értéke nem 0, akkor a Feladatütemező már fut, tehát nem kell elindítani. Ellenkező esetben a CreateProcess függvénnyel indítjuk el a Feladatütemezőt. Ehhez szükség van egy TStartupInfo és egy PROCESS_INFORMATION struktúrára. Az előzőben kell megadnunk a process indításával kapcsolatos beállításokat. Erre most nem lesz szükség, de a struktúra cb mezőjében meg kell adnunk a struktúra méretét, miután a ZeroMemory függvénnyel töröltük az összes mező értékét (a struktúra által foglalt memóriaterületet 0 bájtokkal töltöttük fel).
A CreateProcess függvénynél meg kell adnunk a program elérési útvonalát is, amit a SearchPath függvénnyel kérdezünk le. Ha a függvény visszatérési értéke nem 0, akkor megkapjuk a teljes fájlnevet az App változóban.
Ha a CreateProcess függvény visszatérési értéke igaz, akkor sikerült elindítani a programot.
NT alatt valamivel bonyolultabb elindítani a Feladatütemezőt, mivel itt szervizként fut ez az alkalmazás. Először is szükség lesz a Service Control Manager azonosítójára, amit az OpenSCManager függvénnyel kérdezünk le. Ha a függvény visszatérési értéke nem 0, akkor ez sikerült, így megpróbáljuk megnyitni a Feladatütemező szervizalkalmazást az OpenService függvénnyel. Első paraméterként megadjuk a Service Control Manager azonosítóját, majd az alkalmazás nevét, és a hozzáférési opciókat. Ez utóbbit úgy adjuk meg, hogy el tudjuk indítani az alkalmazást (SERVICE_START), illetve le tudjuk kérdezni a jelenlegi állapotát (SERVICE_QUERY_STATUS). A QueryServiceStatus függvénnyel lekérdezzük a szerviz állapotát egy SERVICE_STATUS típusú struktúrába. Ezután megvizsgáljuk ennek a struktúrának a dwCurrentState mezőjét. Ha ennek értéke SERVICE_RUNNING, akkor az alkalmazás már fut. Ellenkező esetben elindítjuk a StartService függvénnyel.
A leállítás kezdeti lépései hasonlóképpen történnek, mint az indításé. Az operációs rendszer típusára itt is szükség lesz, hiszen a leállítás is különböző a két platformon. Windows 9x esetében ugyanúgy megpróbáljuk megkeresni az alkalmazás ablakát a FindWindow függvénnyel, ahogyan az indításnál is tettük. Ha megvan az ablak azonosítója, akkor egyszerűen küldünk neki egy WM_QUIT üzenetet a PostMessage függvénnyel.
NT esetében a szervizalkalmazást a SERVICE_STOP és SERVICE_QUERY_STATUS opciókkal nyitjuk meg. Lekérdezzük az aktuális állapotot, és ha az alkalmazás fut, akkor a ControlService függvénnyel küldünk neki egy SERVICE_CONTROL_STOP üzenetet (ezért volt szükség a SERVICE_STOP opcióra az OpenService függvénynél).