|
A mellékelt példaprogram megnyitása előtt a ServiceStatus.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A komponens használatához első lépésként a Machine property-be be kell írnunk a kérdéses számítógép nevét. Ezután a ServiceName property-ből választhatjuk ki, hogy melyik szerviz alkalmazás státuszára vagyunk kíváncsiak. Ha a művelet sikeres volt, akkor a Status property-n belül máris láthatóak a lekérdezett értékek. Ez a property egy összetett, objektum típusú property. Nézzük milyen tulajdonságokkal rendelkezik.
Ha a Ready property-e igaz, akkor a Status-on belül az összes többi property feldolgozható értéket tartalmaz. Ha a Ready hamis, akkor vagy sikertelen volt a lekérdezés, vagy még nem is történt meg egy szerviz alkalmazás információnak a lekérdezése. Ebben az esetben a Status-on belül a többi property értéke sem használható fel.
A ServiceTypes property-ből olvashatjuk ki, hogy milyen típusú az adott szerviz alkalmazás.
A CurrentState-ből az állapítható meg, hogy fut-e, vagy sem a program.
A ControlsAccepted property-ből megtudhatjuk, hogy a szerviz alkalmazás milyen parancsokat fogad el. Ilyen lehet például a leállításra, vagy a felfüggesztésre való utasítás.
A komponens megvalósításánál a QueryServiceStatus függvénnyel kérdezzük le a Status property értékeit. Ennél egy TServiceStatus struktúrát kell átadnunk, melybe visszakapjuk az eredményeket. Az egyes property-k neve és így a funkciójuk is egyezik a TServiceStatus struktúra mezőivel.
Ahhoz, hogy a QueryServiceStatus használható legyen, először kapcsolatot kell teremtenünk a Service Control Manager-el. Ehhez az OpenSCManager hívása szükséges. Ha ez sikeresen megtörtént, akkor megnyitjuk a kiválasztott szervizt az OpenService függvénnyel. Itt paraméterként a SERVICE_QUERY_STATUS konstanst használjuk jelezve, hogy annak státusz információit szeretnénk lekérdezni. Ha ez is sikeresen lefutott, akkor jöhet a QueryServiceStatus hívása, majd a kapott értékek feldolgozása és elhelyezése a Status property egyes értékeibe.
A ServiceName property-ben megjelenítjük az összes elérhető szerviz alkalmazás nevét. Az ehhez használt algoritmust a múlt héten közölt cikkből vettük át, így ennek részletezésével nem foglalkozunk itt. Említésre csak annyi érdemes, hogy itt most nem csak a szerviz megjelenítendő neveit (lpDisplayName) kérdezzük le, hanem magának a szerviznek a neveit (lpServiceName) is. Erre majd az OpenService-nél lesz szükségünk.
|