|
|
Fájl, GUID vagy ProgID tulajdonságainak lekérdezése
|
|
Példaprogram letöltése
5912 bájt
|
Ha van egy objektumunk, amiről bővebb információt szeretnénk lekérdezni a Windows-tól, akkor ezt megtehetjük egy Windows API függvény segítségével. Elég, ha ismerjük pl. a fájl kiterjesztését, a GUID-ot vagy a ProgID-t (pl. „Word.Application”). Ettől kezdve megtudhatjuk a fájltípushoz rendelt programot, a fájltípus nevét, a ProgID-hez tartozó EXE nevét, stb.
A Windows API függvény neve AssocQueryString.

AssocQueryString
HRESULT AssocQueryString(
ASSOCF flags,
ASSOCSTR str,
LPCTSTR pszAssoc,
LPCTSTR pszExtra,
LPTSTR pszOut,
DWORD *pcchOut
);
Paraméterek
ASSOCF flags
A lekérdezés néhány tulajdonságát adhatjuk meg konstansok segítségével. A használható konstansok az alábbi táblázatban láthatók:
| Konstans neve |
Érték |
Leírás |
| ASSOCF_INIT_NOREMAPCLSID |
1 |
A CLSID értéket nem konvertálja ProgID-re. |
| ASSOCF_INIT_BYEXENAME |
2 |
Ha a pwszAssoc paraméterben egy EXE nevét adtuk meg, akkor ezt a flag-et be kell állítani. |
| ASSOCF_OPEN_BYEXENAME |
2 |
Azonos az előzővel. |
| ASSOCF_INIT_DEFAULTTOSTAR |
4 |
Ha a gyökér kulcsban nem találta meg a kérdezett értéket, akkor megpróbálja megkeresni a * kulcs alatt. |
| ASSOCF_INIT_DEFAULTTOFOLDER |
8 |
Ha a gyökér kulcsban nem találta meg a kérdezett értéket, akkor megpróbálja a Folder kulcs alatt megkeresni. |
| ASSOCF_NOUSERSETTINGS |
16 |
Csak a HKEY_CLASSES_ROOT kulcs alatt keres, a HKEY_CURRENT_USER kulcsot kihagyja. |
| ASSOCF_NOTRUNCATE |
32 |
Nem csonkítja meg a visszatérési értéket. Ha ez nem férne bele a bufferbe, akkor hibakódot ad vissza, valamint az érték lekérdezéséhez szükséges buffer méretet. |
| ASSOCF_VERIFY |
64 |
Ellenőrzi, hogy a lekérdezett adat helyes-e. Ez a flag engedélyezi az adatok beolvasását a winchesterről. Összehasonlítja a Registry-ben és az .exe fájlban tárolt „firendly” (barátságos) nevet. Ez a flag csökkenti a lekérdezés hatékonyságát. |
| ASSOCF_REMAPRUNDLL |
128 |
Normális esetben a függvény az első megadott .exe vagy .dll fájl adatait kérdezi le. Ha olyan parancssort adunk meg, amely a Runddl.exe-t futtatja, akkor ezzel a flag-gel megadhatjuk, hogy a Rundll-t hagyja ki. |
| ASSOCF_NOFIXUPS |
256 |
Nem javítja a Registry bejegyzéseit, például akkor, ha az .exe-ben és a Registry-ben lévő friendly név nem egyezik. |
| ASSOCF_IGNOREBASECLASS |
512 |
Nem veszi figyelembe a BaseClass értéket. |
ASSOCSTR str
A lekérdezett adat típusát adhatjuk meg ebben a paraméterben. A lehetséges értékek a következők lehetnek:
| Konstans |
Érték |
Jelentés |
| ASSOCSTR_COMMAND |
1 |
Shell parancs-sztring |
| ASSOCSTR_EXECUTABLE |
2 |
futtatható Shell parancs |
| ASSOCSTR_FRIENDLYDOCNAME |
3 |
a dokumentum típusának „barátságos” (friendly) neve |
| ASSOCSTR_FRIENDLYAPPNAME |
4 |
a futtatható fájl barátságos neve |
| ASSOCSTR_NOOPEN |
5 |
átlépi az open kulcs alatt lévő információkat |
| ASSOCSTR_SHELLNEWVALUE |
6 |
a ShellNew kulcs alatt is „körülnéz” |
| ASSOCSTR_DDECOMMAND |
7 |
DDE parancs minta (pl. „[open("%1")]”). |
| ASSOCSTR_DDEIFEXEC |
8 |
DDCOMMAND process létrehozásához |
| ASSOCSTR_DDEAPPLICATION |
9 |
alkalmazás neve DDE formában |
| ASSOCSTR_DDETOPIC |
10 |
tárgy név DDE formában |
LPCTSTR pszAssoc
Pointer egy #0 karakterrel lezárt sztringre, ami meghatározza a gyökér kulcsot. A sztring az alábbi csoportok egyikébe tartozhat:
| Csoport |
Leírás |
| Fájlnév kiterjesztés |
Például .txt, .doc, stb. A ponttal együtt kell megadni! |
| CLSID |
CLSID GUID szabványos „{GUID}” formátumban. |
| ProgID |
ProgID, mint például a „Word.Application”. |
| Futtatható parancs |
Egy alkalmazás .exe fájljának neve. Ha ezt használjuk, akkor az ASSOCF_OPEN_BYEXENAME flag-et be kell állítanunk a flags paraméterben. |
LPCTSTR pszExtra
Opcionális sztring paraméter, amelyben további adatokat adhatunk meg a lekérdezéshez (pl. az „open” shell szó).
LPTSTR pszOut
Ebben a paraméterben kapjuk meg a lekérdezett adatot.
DWORD *pcchOut
Ebben a paraméterben kapjuk meg a kimeneti bufferbe (pcchOut) írt karakterek számát.
Visszatérési érték
A visszatérési érték S_OK, ha a lekérdezés sikerült, E_POINTER, ha a buffer mérete túl kicsi, és OLE hibakód, ha más hiba történt.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2002 évkönyv 74. 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!
|