Delphi - Program hozzárendelése állomány kiterjesztéshez

1. rész

forráskód letöltése
Minden egyes állománynak, a kiterjesztése alapján hozzárendelhető egy program, mely kezeli azt. Például a DOC kiterjesztéshez tartozik a Microsoft Word programja. Ettől kezdve egy DOC kiterjesztésű állományra kattintva a Windows elindítja a Word-öt, mely betölti a kiválasztott állományt.

Ha létrehozunk egy saját állomány típust egyedi kiterjesztéssel, akkor ehhez hozzárendelhetjük saját alkalmazásunkat. Sőt tetszőleges menüpontokat is rendelhetünk ahhoz a menühöz, mely akkor jelenik meg, amikor a felhasználó a Windows Intézőjében jobb gombbal kattint ezen az állományon.

Az így regisztrált állományokhoz tetszőleges ikont is rendelhetünk.

Mellékelt példában létrehozunk egy olyan komponenst, melynek segítségével a fenti feladat igen egyszerűen elvégezhető. Példaként pedig az XYZ kiterjesztésű állományokhoz rendeljük hozzá a saját alkalmazásunkat. A mellékelt példaprogram megnyitása előtt az Extension.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A program helyes működése érdekében az Extension1 komponens néhány alkönyvtárat tartalmazó property-t át kell állítani attól függően, hogy Ön honnan futtatja a programot. Ezt a beállítást elvégzi a program a Form OnCreate eseményénél. Azonban, ha változtat a komponens beállításain, akkor célszerű, ha ezeket a könyvtárakat is átírja a megfelelőre, majd törölje a Form OnCreate-nél lévő erre vonatkozó forráskód részletet.

Fenti regisztrációnak tekintsük át először is az elméletét, mielőtt rátérnénk a mellékelt példa bemutatására.

Minden regisztrációs feladat elvégzéséhez a Windows regisztrációs adatbázisát kell módosítanunk, kiegészítenünk.

A regisztrációs adatbázis HKEY_CLASSES_ROOT kulcsán belül találhatók az állomány kiterjesztések és a hozzájuk tartozó alkalmazás.

Itt hozzunk létre a fenti példánál maradva egy ".XYZ" kulcsot. Ezen kulcs alapértékéhez (Default) írjunk egy tetszőleges sztringet, de azért nem árt, ha némi köze van az állományunk kiterjesztéséhez. Ez lehet például "xyz.file".

Ezek után szintén a HKEY_CLASSES_ROOT-on belül hozzunk létre ismét egy új kulcsot, méghozzá az előbbi sztring felhasználásával. Most már van egy "xyz.file" kulcsunk is. A lényegi műveleteket itt kell elvégezni.

A "xyz.file" kulcs alapértékénél (Default) megadható egy tetszőleges sztring. Ez jelenik meg az Intézőben az állomány típusánál. Ide olyan sztringet érdemes megadni, mely néhány szóban elmondja a felhasználónak, hogy ez az állomány mi is valójában. Például: "XYZ típusú állomány". A Word DOC kiterjesztésű állománya esetén itt "Microsoft Word dokumentum" jelenik meg.

Ha az "xyz.file" kulcson belül létrehozunk egy újabbat DefaultIcon néven, akkor itt rendelkezhetünk arról, hogy milyen ikon jelenjen meg az XYZ állományunknál.

Itt az alapértéknél (Default) beírhatunk egy ikon állományt (*.ico) elérési útvonallal, de akár megadhatunk egy EXE-t, vagy DLL-t is, melyben vannak ikonok. Utóbbi esetben még arról is rendelkeznünk kell, hogy melyik ikon kerüljön felhasználásra. Például a következő esetben:
D:\Dso\0210\Extension04\Icon.dll,2 az adott útvonalon található Icon.dll-ből a második ikon kerül felhasználásra.

Ha menüpontokat is szeretnénk létrehozni arra az esetre, ha a felhasználó jobb gombbal kattint az állományon, akkor az "xyz.file" kulcson belül még egy Shell nevű kulcsra is szükségünk lesz.

Ezen belül hozzunk létre annyi kulcsot, amennyi menüpontot akarunk. Ezen kulcsok elnevezése tetszőleges lehet. Hogy mi jelenjen meg menüpontként azt az adott kulcs alapértékénél (Default) adhatjuk meg.

Minden ilyen menüpont kulcs alá fel kell vennünk még egy Command nevű kulcsot is. Itt mondhatjuk meg, hogy milyen alkalmazás, milyen paraméterekkel induljon el az adott menü kiválasztása esetén.

Itt megadhatjuk például a következőt: D:\Dso\0210\Extension04\Project1.exe /open "%1"
Ha ezt a menüt választja a felhasználó, akkor ezzel elindítja a Project1.exe-t a megadott paraméterekkel, melyeket a program indulásakor ellenőrizhetünk és ennek megfelelően futtathatjuk a programot. A paraméterként megadott "%1" helyére a Windows behelyettesíti azt az állományt, teljes elérési útvonallal együtt melyre a felhasználó kattintott. Így a programunk erről is értesülhet.

Ezek után már csak újra kell indítanunk a Windows-t. Ezt tehetjük a gép újra indításával, de az is elegendő, ha kilépünk és újra bejelentkezünk.


Nézzük most a mellékelt példát.

A létrehozott TExtension komponens fenti feladatot teljes mértékben elvégzi, a teendő csupán annyi, hogy be kell állítani a property-ket és meghívni a Register nevű eljárást, mely elvégzi a Windows regisztrációs adatbázisának a módosítását.

Nézzük sorra mik is ezek a property-k.

Hogy milyen állomány kiterjesztéshez szeretnénk hozzárendelni saját alkalmazásunkat, azt az Extension property-ben adhatjuk meg.

Ennek az állomány típusnak a megnevezését az ExtensionName property-be írhatjuk. Ez jelenik meg az Intézőben is az állomány típusánál.

A DefaultIconFile property-ben egy ICO, vagy EXE, illetve DLL állományt kell megadnunk, ahonnan az állomány ikonja lesz beolvasva.

Ha EXE-t, vagy DLL-t használunk csak akkor lesz szükségünk a DefaultIconIndex property-re. Itt adhatjuk meg, hogy a kiválasztott állományból hányadik ikon kerüljön felhasználásra.

A RegKey property-ben egy tetszőleges sztringet adhatunk meg. Ez lesz a regisztrációs adatbázisban a HKEY_CLASSES_ROOT kulcs alatt létrehozott új bejegyzés neve.

A MenuItems property-n keresztül tetszőleges számú menüpontot vehetünk fel. Itt minden egyes menüponthoz három újabb property tartozik.

Az első a Caption. Ez lesz a megjelenő menüpontnak a neve.

A második a Command. Itt adhatjuk meg egy alkalmazás nevét teljes elérési útvonallal együtt és ez a program lesz elindítva, ha felhasználó kiválasztja ezt a menüpontot.

Végül a harmadik a CommandParams. Ez egy TStringList típusú property. Itt minden egyes sorba megadhatunk egy paramétert, melyek az előbbi alkalmazásnál lesznek felhasználva. Ha például itt két tétel szerepel: /elso és /masodik, valamint a Command property-be a "c:\abc\def.exe" szerepel, akkor a menüpont kiválasztása esetén a következőképen néz ki az elindított program: "c:\abc\def.exe /elso /masodik"

Ha minden beállítás megvan, akkor már csak a Register eljárást kell meghívnunk és többi "megy magától".

Ha szeretnénk egy adott regisztrációt törölni, akkor az UnRegister eljárás meghívásával ezt megtehetjük. Ebben az esetben csak az Extension property értéke lesz felhasználva, az összes többire nincs szükség.


A komponens működése különösebb magyarázatra nem szorul. Egyszerűen annyit tesz, hogy a beállított property-k értékét figyelembe véve létrehozza a regisztrációs adatbázisban a megfelelő kulcsokat és ezekhez beállítja a megfelelő értékeket.

Talán még a MenuItems TCollection-ból származtatott típusú property létrehozása és kezelés szorulhatna némi magyarázatra, mivel ez kissé bonyolultabb, mint mondjuk egy egyszerű sztring típusú property, de a TCollection osztály felhasználásáról már több cikkünk is foglalkozott, így ezeket az információkat nem ismételnénk meg itt.

Ha futtatta a programot és a regisztrációt, valamint ez érvényesítve is lett, akkor a mellékelt teszt.xyz állománynak meg kell, hogy változzon az ikonja, valamint ha rákattint, akkor a mellékelt programnak kell elindulnia.

Program hozzárendelése állomány kiterjesztéshez cikksorozat