HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Weblapok változását figyelő szolgáltatás készítése


Példaprogram letöltése

5254 bájt

A háttérben futó Windows szolgáltatások kiválóan alkalmasak automatizált műveletek végrehajtásához. Ebben a példában egy olyan szolgáltatást készítünk, amely óránként figyeli a megadott weboldalakat, és ha az oldalakban változás történik, akkor küld egy e-mail-t a beállított címre, melyben felsorolja a változott oldalak listáját.

A Windows szolgáltatás működéséhez szükséges egy munkakönyvtár. A mellékelt példaprogram alapértelmezés szerint a c:\WebCheckService könyvtárat használja. Mielőtt futtatná a mellékelt példaprogramot, hozza létre a szolgáltatás munkakönyvtárát, és helyezze el benne az URL.ini állományt. Az ini állományban kell megadni az ellenőrizendő oldalak listáját, valamint az e-mail küldés beállításait.
A szolgáltatás munkakönyvtárát a Unit1.pas 21. sorában található ServicePath konstans értéke határozza meg.
Windows szolgáltatás készítéséhez válasszuk a File – New – Other menüpontot. A megjelenő New Items ablakban válasszuk a New fül Service Application elemét.
Létrejövő alkalmazásunkban egy DataModul szerű ablakot láthatunk, Service1 névvel. Ennek az ablaknak az eseményein keresztül vezérelhetjük Windows szolgáltatásunk működését.
A szolgáltatás a Windows szolgáltatások között a DisplayName-ben megadott szöveg alapján lesz bejegyezve.
Az egy óra eltelését egy TTimer komponens segítségével figyeljük. Az FTimer objektumot a szolgáltatás OnCreate eseményében hozzuk létre. Ha egy másodperces késleltetést akarunk, akkor az Interval értékét 1000-re kell állítanunk. Ennek megfelelően az egy óra = 1000 x 60 x 60 = 3600000. A Timer OnTimer eseményének bekövetkezésekor a DoTimer metódust hívjuk meg.
Egy szolgáltatást ki- és be lehet kapcsolni, fel lehet függeszteni, majd ismét lehet folytatni. Hogy ezek a funkciók hibátlanul működjenek, az OnContinue, OnPause, OnShutDown, OnStart, OnStop eseményekben gondoskodnunk kell az FTimer ki- és bekapcsolásáról.
Amikor a szolgáltatás elindul, létrejön az OnExecute esemény. Ebben az eseményben gondoskodnunk kell arról, hogy a szolgáltatás ne érjen véget, csak ha leállítják. Ezt egy végtelen ciklus segítségével érhetjük el.
while not Terminated do begin
  Sleep(1000);
  ServiceThread.ProcessRequests(False);
end;
A vizsgálandó weblapokat egy ini állományban soroljuk fel. Az ini állományt a TIniFile osztály segítségével kezelhetjük. A ReadSection metódus meghívásával a bejegyzett kulcsokat olvashatjuk ki, egy TStringList típusú változóba. Egy kulcs értékének kiolvasására a ReadString metódus szolgál.
URL:=IniFile.ReadString('URL',section[i],'');
Az aktuálisan, feldolgozás alatt lévő weboldal letöltéséhez elkészítettük a LoadFromURL eljárást, amely a paraméterként kapott oldalt elmenti temp.html néven.
procedure LoadFromURL(URL: string); 
Egy Internet kapcsolatot az InternetOpen függvénnyel hozhatunk létre.
hSession:=InternetOpen('MSIE',INTERNET_OPEN_TYPE_PRECONFIG,Nil,Nil,0);
A megadott weboldalhoz az InternetOpenURL függvénnyel csatlakozhatunk.
hURL:=InternetOpenURL(hSession,PChar(URL),Nil,0,0,0);
Az oldalt tartalmát az InternetReadFile függvénnyel tölthetjük le.
InternetReadFile(hURL,@buf,8192,dwBytesRead);
A buf változó tartalmát egy TMemoryStream típusú változó segítségével menthetjük el lemezre.
Az előzőleg letöltött állományukat az ini fájlban szereplő kulcs neve alapján tároljuk el, html kiterjesztéssel.
Az aktuálisan letöltött weboldal a temp.html-ben található. A változás ellenőrzéséhez ezt az állományt bájtról-bájtra össze kell hasonlítanunk, az előzőleg letöltött oldallal. Az összehasonlítást a CompareFiles függvény végzi.
function CompareFiles(f1, f2: String): Boolean;
A függvénynek a két összehasonlítandó állománynevét kell megadnunk. Ha a két állomány azonos, akkor a függvény igaz értékkel tér vissza.
Ha a temp.html tartalma nem egyezik meg az előzőleg letöltött állománnyal, akkor az előző állományt helyettesítjük a temp.html-lel, valamint az URL-t feljegyezzük a MailItems változóba.
Miután az ini állományban található összes címet ellenőriztük, a MailItems tartalmazza a változott oldalak listáját, amelyet egy mail-ben el kell küldenünk.
E-mail küldéséhez a TNMSMTP osztályt használjuk fel.
A Host property-ben kell megadnunk a mail server címét. A PostMessage property-ben adhatjuk meg a címzett címét, saját címünket, az üzenet tárgyát és törzsét.
Az üzenetet a SendMail metódus küldi el.
Miután elkészítettük alkalmazásunkat, fordítsuk le azt, hogy az exe állomány létrejöjjön.
Ha az alkalmazást fel akarjuk venni a Windows szolgáltatások közé, akkor parancssorból el kell indítanunk az alkalmazást az –install paraméterrel.
WebCheckService – install
Ha a programot el akarjuk távolítani a szolgáltatások közül, akkor az –uninstall paramétert kell alkalmaznunk.
A Windows szolgáltatások vezérlő ablakát a Start – Beállítások – Vezérlőpult – Felügyeleti eszközök – Szolgáltatások kiválasztásával érhetjük el.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 235. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |