HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Szabványos megnyitás és mentés dialógus ablakok használata VBScript-ekben


Példaprogram letöltése

2495 bájt

Delphi-ben, C#-ban és más magas szintű fejlesztői környezetben rendelkezésre álló komponensek segítségével könnyedén megvalósítható a Windows szabványos dialógus ablakainak kezelése. A Windows Scripting Host (WSH) nem rendelkezik ilyen komponensekkel, de ez nem jelenti azt, hogy teljesen el vagyunk zárva a lehetőség elől. Példákon keresztül bemutatunk egy megoldást, amivel szkriptekből is elérhetővé tesszük a megnyitás és mentés ablakokat Windows XP-ben és 2000-ben is.

Cikkünkhöz mellékeltük a témát adó szkripteket:
"OpenDlg.vbs" - Megjelenít egy szabványos megnyitás dialógus ablakot.
"SaveDlg.vbs" - Megjelenít egy szabványos mentés dialógus ablakot.
Nem fogunk olyan hatékonyságot elérni, mint egy Delphi komponenssel, de alapszintű műveleteket meg tudunk valósítani. Így még mindig lényegesen egyszerűbb, mint ha nekünk kell mindent leprogramozni. Először is tisztázzuk, hogy melyik ablakokról van szó: ha elindítjuk például a Paint programot és a "Fájl" ("File") menü "Megnyitás" ("Open") pontjára kattintunk, megjelenik egy szabványos megnyitás dialógus ablak. A "Mentés" ("Save") vagy "Mentés másként" ("Save As") menüvel pedig egy szabványos mentés dialógus ablakot csalogathatunk elő. Célunk, hogy ugyanezt szkriptből is megjelenítsük, és kezeljük az általa szolgáltatott információt - azaz a felhasználó által megadott fájl nevét. Mivel a Windows Scripting Host (WSH) részéről nem kapunk támogatást, át kell hidalnunk a problémát.
Nézzük elsőként a Windows XP-beli megvalósítást:
Az operációs rendszer több DLL-ben kezeli a dialógus ablakokat. A megnyitásért és mentésért többek között a %systemroot%\system32 mappában található "SAFRCFILEDLG.DLL" felelős. Azért többek között, mert ugyanezek az ablakok más helyről is elérhetők, a DLL-en belüli hivatkozásoknak köszönhetően. Ha belenézünk láthatjuk, hogy tartalmaz néhány metódust és tulajdonságot, márpedig, ha ez így van, akkor jó eséllyel kívülről is el lehet érni őket. Az egyik ilyen metódus a "FileOpen". Hozzunk létre VB szkriptben egy új objektumot a DLL-ből és rögtön hivatkozzunk erre a metódusra:
set FS = CreateObject("SAFRCFileDlg.FileOpen")
A dialógus ablak bezárása után keletkezik egy visszatérési érték, amit ki kell olvasnunk. Kiolvasása után törlődik a tartalma. Ha nem olvassuk ki, akkor nem törlődik és nem tudjuk még egyszer megnyitni az ablakot.
return=FS.OpenFileOpenDlg
Ezzel gyakorlatilag megjelenítettünk és szabályosan bezártunk egy megnyitás ablakot, amiben a felhasználó kiválaszthat egy fájlt, vagy a "Mégsem" ("Cancel") gombbal, esetleg az ESC billentyűvel meggondolhatja magát és kiléphet. Döntésének az eredménye a "FileName" tulajdonságban tárolódik, csak megfelelően kell értelmeznünk. Ha a visszakapott érték egy üres sztring, akkor meggondolta magát és kilépett, ha nem, akkor kijelölt egy fájlt. Ezt egy egyszerű IF THEN ELSE formulával lekezelhetjük:
if  FS.FileName <> "" then 
 wscript.Echo "Fájlnév: " & FS.FileName
else
 wscript.Echo "A felhasználó kilépett"
end if
Következő feladat egy mentés ablak megjelenítése. Az eljárás megegyezik az előbb vázolt megoldással, csak néhány ponton meg kell változtatnunk a hivatkozásokat. Nem a "FileOpen" metódust kell meghívni, hanem a "FileSave"-t és a kötelezően kiolvasandó visszatérési érték neve "OpenFileSaveDlg".
set FS = CreateObject("SAFRCFileDlg.FileSave")
return=FS.OpenFileSaveDlg
if  FS.FileName <> "" then 
 wscript.Echo "Fájlnév: " & FS.FileName
else
 wscript.Echo "A felhasználó kilépett"
end if
Tipp:
A dialógus ablak lekezeli, ha már létező fájlt jelölünk ki mentésre és feltesz egy kérdést, hogy felülírjuk-e az előző példányt. Honnan fogjuk megtudni az ablak bezárása után, hogy milyen választ adott a felhasználó? Nem kell tudnunk, elég tudni a fájlnevet és szkripten belül, feltétel nélkül elvégezni a felülírást. Ha a felhasználó igennel válaszolt, akkor a felülírás mellett döntött, ha nemmel, akkor viszont üres a "FileName" változó tartalma, ami egyenlő a "Mégsem" jellegű kilépéssel. Sőt egy nemleges válasz önmagában nem zárja be az ablakot, tehát csak szabályos, de más úton tud kilépni, amit mi lekezelünk az IF THEN ELSE feltételben.
A fentiekből kitűnik, hogy a szűkös lehetőségek ellenére az első pillantásra megoldhatatlannak látszó helyzeteket is sokszor megfelelően lehet kezelni, annak ellenére, hogy a WSH nem nyújt támogatás.
Térjünk át a Windows 2000-hez: ott ugyanis hiányzik a "SAFRCFILEDLG.DLL". Egyszerűen másoljuk át az XP-ből és adjuk ki a következő parancsot:
regsvr32 safrcdlg.dll
Ezzel regisztráltuk az operációs rendszerben és ettől kezdve változtatás nélkül futnak a fenti szkriptjeink. A DLL eltávolítása az alábbi módon lehetséges:
regsvr32 /u safrcdlg.dll

Könyv
Ez a cikk megtalálható ebben a könyvben: Windows Software Offline 2002 évkönyv 308. 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 |