HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Meghajtók elrejtése a Sajátgép mappában és az Intézőben


Példaprogram letöltése

6475 bájt

Van egy lehetőség arra, hogy a Sajátgép mappában, és ezzel együtt az Intézőben illetve a fájldialógus ablakokban a meghatározott betűjellel rendelkező meghajtókat elrejtsük. Most egy olyan komponenst készítünk, amellyel ez a lehetőség kihasználható, és így programból is könnyedén szabályozhatjuk, hogy mely meghajtók látszódjanak, illetve ne látszódjanak.
A mellékelt példaprogram megnyitása előtt a NoDrives.pas-ban lévő komponenst telepítenie kell a Delphi alá.

Annyit már előre érdemes tisztázni, hogy ez az elrejtés nem jelenti azt, hogy a meghajtók nem érhetők el. Sőt, ha az intézőben egy olyan elérési útvonalat adunk meg, amely egy elrejtett meghajtón van, akkor az minden további nélkül megjelenik.

A komponens NoDriveLetters property-jében kell egymás után felsorolni azoknak a meghajtóknak a betűjelét, melyeket el szeretnénk rejteni (pl. „AC”). A betűket folyamatosan, egymás után kell beírni, nem kell elválasztó jelet sem használni, mivel az értékadás után a komponens úgyis elrendezi a betűjeleket. Az eredmény nem jelentkezik azonnal, mivel a rendszerből ki kell jelentkezni (majd újra bejelentkezni), hogy az új beállítások érvénybe lépjenek.

A megoldás kulcsa a Registry adatbázisban keresendő.
A HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer kulcs alatt elhelyezhetünk egy NoDrives nevű DWORD típusú értéket. A rendszerben összesen 26 betűjellel jelölt meghajtó lehet. A NoDrives érték minden bitje egy-egy betűjelhez tartozik. Az egyes helyi értéken lévő bit az A meghajtóhoz tartozik, a második a B -hez, és így tovább. Ha a betűjelhez tartozó bit értéke 1, akkor a meghajtó nem látszik. Ha például az érték 5, akkor az A, B és C meghajtók lesznek elrejtve. Ha az érték 0, akkor minden meghajtó látszik, míg a $03FFFFFFFF értéknél az összes meghajtó el lesz rejtve.

A fentiekből következik, hogy egy olyan komponenst kell készíteni, amely ezt a Registry értéket manipulálja a beállított értékeknek megfelelően. Mindössze egy property-je lesz a komponensnek, ami string típusú, és az elrejtendő meghajtók betűjeleit tartalmazza. Amikor értéket adunk a property-nek, akkor meghívja a DriveLettersOnly függvényt. Ez a függvény a paraméterként átadott sztringből kiolvassa az angol ABC betűit, és sorrendbe rendezve, nagybetűkre alakítva adja vissza. A függvénynek tetszőleges sztring átadható, az eredmény mindig egy rendezett betűsor lesz, vagy egy üres sztring.

A komponens konstruktorában a legutoljára beállított értéket ki kell olvasni a Registry-ből, és a kapott számot át kell alakítani egy betűsorrá, ami aztán a NoDriveLetters property értéke lesz. Ezt a műveletet a Refresh eljárás végzi el, de ez felhasználja a ValueToLetters függvényt is. Ez a függvény a paraméterként kapott DWORD típusú számból előállítja az annak megfelelő betűsort. Ez egy viszonylag egyszerű ciklusban történik:
  result:='';
  for i:=1 to 26 do begin
    if (Value and (1 shl (i-1)))>0 then result:=result+chr(i+64);
  end;
A NoDriveLetters property-ben megadott értéket vissza is kell írni a registry-be. Erre szolgál az Update eljárás, ami a ValueFromLetters függvény segítségével előállítja a betűsorból a Registry-be írandó értéket, és el is tárolja azt.

A RestrictAllDrives eljárással az összes meghajtó elrejthető, mivel ez a teljes betűsort értékül adja a NoDriveLetters property-nek. A ShowAllDrives eljárás ennek fordítottja, vagyis az összes meghajtó látható lesz, mivel törli a property értékét.

A példában a komponens NoDriveLetters property-je üres, illetve ha a NoDrives érték meg van adva a Registry-ben, akkor annak megfelelő értéket vesz fel. Ha módosítjuk a property értékét, akkor az elvégzi a feladatát, vagyis elrejti a megadott meghajtókat. Ha a property értékét nem töröljük, akkor ennek hatása megmarad, vagyis a Delphi-ből való kilépéskor, sőt a rendszer újraindítása után is megmarad a legutóbbi beállítás. Ennek elkerülése érdekében vagy a property értékét, vagy a Registry-ből a fent megadott kulcs alatt található NoDrives értéket töröljük.



Cikksorozat

#IDKategóriaCikk címeSorozat
1166DelphiOsztály hierarchia lekérdezése1. rész
1180DelphiOsztály hierarchia lekérdezése2. rész


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