Image
7.6.2016 0 Comments

ASSEMBLER pod Windows: Register + INI súbory II. (22. časť)

Späť na úvod >> Späť na programovanie >> Späť na seriál

RegQueryInfoKey

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Nie

advapi32.lib

advapi32.inc

Funkcia vráti informácie o špecifikovanom kľúči registra Windows.

Syntax:  LONG RegQueryInfoKey, HKEY hKey, LPTSTR lpClass, LPDWORD lpcbClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcbMaxSubKeyLen, LPDWORD lpcbMaxClassLen, LPDWORD lpcValues, LPDWORD lpcbMaxValueNameLen, LPDWORD lpcbMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime            

HKEY hKey: Aktuálny otvorený kľúč alebo ľubovoľný z nasledujúcich preddefinovaných hodnôt: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS.

LPTSTR lpClass: Ukazovateľ na buffer, do ktorého sa uloží meno triedy kľúča. Tento parameter môže byť NULL.

LPDWORD lpcbClass: Ukazovateľ na DWORD, ktorý definuje veľkosť buffera pre parameter lpClass. Táto veľkosť zahrnuje aj ukončovací nulový znak. Pri návrate z funkcie hodnota lpcbClass obsahuje počet bajtov kopírovaných do lpClass. Tento počet však nezahrnuje ukončovací nulový znak. V prípade, že buffer nie je dostatočne veľký, vznikne chyba ERROR_MORE_DATA a obsah lpcbClass obsahuje počet bajtov, o ktoré treba buffer zväčšiť.

LPDWORD lpReserved: Rezervované, musí byť nastavené na NULL.

LPDWORD lpcSubKeys: Ukazovateľ na DWORD, do ktorého sa uloží počet podkľúčov pre špecifikovaný kľúč hKey. Tento parameter môže byť NULL.

LPDWORD lpcbMaxSubKeyLen: Ukazovateľ na DWORD, do ktorého sa uloží dĺžka najdlhšieho mena ľubovoľného podkľúča daného kľúča. Do tejto dĺžky sa nepočíta ukončovací nulový znak. Tento parameter môže byť NULL.

LPDWORD lpcbMaxClassLen: Ukazovateľ na DWORD, do ktorého sa uloží dĺžka najdlhšieho mena ľubovoľnej triedy pre ktorýkoľvek podkľúč daného kľúča. Do tejto dĺžky sa nepočíta ukončovací nulový znak. Tento parameter môže byť NULL.

LPDWORD lpcValues: Ukazovateľ na DWORD, do ktorého sa uloží počet hodnôt pre špecifikovaný kľúč. Tento parameter môže byť NULL.

LPDWORD lpcbMaxValueNameLen: Ukazovateľ na DWORD, do ktorého sa uloží počet znakov v najdlhšom mene akejkoľvek hodnoty. Do tejto dĺžky sa nepočíta ukončovací nulový znak. Tento parameter môže byť NULL.

LPDWORD lpcbMaxValueLen: Ukazovateľ na DWORD, do ktorého sa uloží počet znakov v najdlhšom komponente dát akejkoľvek hodnoty kľúča. Tento parameter môže byť NULL.

LPDWORD lpcbSecurityDescriptor: Ukazovateľ DWORD, do ktorého sa uloží počet bajtov kľúča bezpečnostného podpisu. Tento parameter môže byť NULL.

PFILETIME lpftLastWriteTime: Ukazovateľ na štruktúru FILETIME, do ktorej sa uloží čas poslednej modifikácie kľúča alebo akékoľvek jeho hodnoty. FILETIME je 64-bitová hodnota, ktorá reprezentuje číslo v 100-nanosekundových intervaloch od 1. januára 1601. Štruktúra má nasledujúci tvar:

FILETIME STRUCT

  dwLowDateTime   DWORD ?

  dwHighDateTime  DWORD ?

FILETIME ENDS

Výsledok funkcie: LONG: Ak sa funkcia skončila úspešne, návratovou hodnotou je ERROR_SUCCESS, inak vráti kód chyby.

 

RegQueryValueKeyEx

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

advapi32.lib

advapi32.inc

Funkcia vráti typ a dáta pre špecifickú hodnotu asociovanú s otvoreným kľúčom v registroch.

Syntax:  LONG RegQueryValueEx, HKEY hKey, LPTSTR lpValueName, LPDWORD lpReserved,    LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData

HKEY hKey: Aktuálny otvorený kľúč alebo ľubovoľný z nasledujúcich preddefinovaných hodnôt: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS.

LPTSTR lpValueName: Ukazovateľ na reťazec ukončený nulou, ktorý obsahuje meno kľúča, na ktorého hodnoty sa pýtame.

LPDWORD lpReserved: Rezervované, musí byť nastavené na NULL.

LPDWORD lpType: Ukazovateľ na hodnotu DWORD, do ktorej sa uloží typ dát hodnoty. lpType môže byť NULL, ak sa nepožaduje žiadny typ dát, inak je to jedna z nasledujúcich hodnôt:

REG_BINARY – binárne dáta v ľubovoľnej forme.

REG_DWORD – 32-bitové číslo.

REG_DWORD_LITTLE_ENDIAN – 32-bitové číslo vo formáte little-endian (to isté ako REG_DWORD). V tomto formáte je najvyšší bajt najvýznamnejším bajtom slova. Toto je najvšeobecnejší formát pre počítače bežiace na systémoch Windows NT a Windows 95.

REG_DWORD_BIG_ENDIAN – 32-bitové číslo vo formáte big-endian. V tomto formáte je najnižší bajt najvýznamnejším bajtom slova.

REG_EXPAND_SZ – reťazec zakončený nulou, ktorý obsahuje nerozložené referencie pre premenné prostredia (napríklad: "%PATH%"). Či to bude Unicode alebo ANSI reťazec, závisí od toho, či použijete funkcie Unicode alebo ANSI. Windows 95 dovoľujú, aby tieto reťazce boli uložené, ale neboli automaticky rozšírené.

REG_LINK – symbolická linka pre iný podkľúč (Unicode symbolic link).

REG_MULTI_SZ – pole reťazcov zakončených nulou. Pole sa končí zdvojeným nulovým znakom.

REG_NONE – nedefinovaný typ.

REG_RESOURCE_LIST – device-driver resource list.

REG_SZ – reťazec zakončený nulou. Či to bude Unicode alebo ANSI reťazec, závisí od toho, či použijete funkcie Unicode alebo ANSI.

LPBYTE lpData: Ukazovateľ na buffer, do ktorého sa uloží obsah hodnoty.

LPDWORD lpcbData: Ukazovateľ na hodnotu DWORD, ktorá obsahuje počet bajtov v lpData bufferi. Tento parameter môže byť NULL, ak je lpData NULL. Pri návrate z funkcie hodnota lpcbData obsahuje počet bajtov kopírovaných do lpData.

Výsledok funkcie: LONG: Ak sa funkcia skončila úspešne, návratovou hodnotou je ERROR_SUCCESS, inak vráti kód chyby.

 

RegRestoreKey

Windows NT

Win 95

Win32s

Lib

Include

Áno

Nie

Nie

advapi32.lib

advapi32.inc

Funkcia RegRestoreKey obnoví hodnoty podkľúča a jeho podkľúčov zo súboru. Obnovené hodnoty kompletne prepíšu obsahy podkľúčov. Ide o deštruktívnu náhradu, pri ktorej sa uchováva iba meno podkľúča. Podkľúče a hodnoty, ktoré existujú v uzle, budú obnovené, ale nebudú existovať v kópii súboru, ktorá bola zničená. V prípade, že niektorý podkľúč daného kľúča je otvorený, skončí sa táto operácia chybou.

Syntax: LONG RegRestoreKey, HKEY hKey, LPCTSTR lpFile, DWORD dwFlags

HKEY hKey: Aktuálny otvorený kľúč alebo ľubovoľný z nasledujúcich preddefinovaných hodnôt: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS.

LPCTSTR lpFile: Ukazovateľ na reťazec zakončeným nulou, obsahujúci meno súboru, ktorý obsahuje dáta pre nový kľúč. Tento súbor sa vytvára pomocou funkcie RegSaveKey. Pozor! V súborovom systéme FAT nesmie mať meno súboru príponu.

DWORD dwFlags: Na vytvorenie nestáleho hive, ktorý je uložený iba v pamäti, nastavte parameter na REG_WHOLE_HIVE_VOLATILE. Toto je nové nastavenie informácií registra, ktoré budú existovať len dovtedy, kým prebehne shutdown systému. Ak je príznak nastavený, parameter hKey môže byť iba HKEY_USERS alebo HKEY_LOCAL_MACHINE.

Výsledok funkcie: LONG: Ak sa funkcia skončila úspešne, návratovou hodnotou je ERROR_SUCCESS, inak vráti kód chyby.

 

RegSaveKey

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Nie

advapi32.lib

advapi32.inc

Funkcia RegSaveKey uloží obsah registra do hive (súboru, ktorý môže byť znova zavedený funkciou RegLoadKey alebo RegRestoreKey).

Syntax:  LONG RegSaveKey, HKEY hKey, LPCTSTR lpFile, LPSECURITY_ATTRIBUTES lpSecurityAttributes

HKEY hKey: Aktuálny otvorený kľúč alebo ľubovoľný z nasledujúcich preddefinovaných hodnôt: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS.

LPCTSTR lpFile: Ukazovateľ na reťazec zakončený nulou obsahujúci meno súboru, ktorý bude obsahovať dáta registra pre nový podkľúč. Pozor! V súborovom systéme FAT nesmie mať meno súboru príponu, pretože potom nie je možné použiť funkcie RegLoadKey a RegRestoreKey.

LPSECURITY_ATTRIBUTES lpSecurityAttributes: Bezpečnostné atribúty pre nový súbor, pokiaľ je tento parameter nastavený na NULL, prijme súbor implicitné bezpečnostné atribúty.

Výsledok funkcie: LONG: Ak sa funkcia skončila úspešne, návratovou hodnotou je ERROR_SUCCESS, inak vráti kód chyby.

 

RegSetValueEx

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

advapi32.lib

advapi32.inc

Funkcia RegSetValueEx nastaví hodnotu podkľúča.

Syntax: LONG RegSetValueEx, HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData

HKEY hKey: Aktuálny otvorený kľúč alebo ľubovoľný z nasledujúcich preddefinovaných hodnôt: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS. Na otvorenie kľúča musíte použiť funkcie RegOpenKeyEx alebo RegCreateKeyEx.

LPCTSTR lpValueName: Ukazovateľ na reťazec zakončený nulou, ktorý obsahuje meno hodnoty, ktorej dáta sa majú nastaviť. Ak hodnota s týmto menom neexistuje v danom kľúči, funkcia ju do tohto kľúča pridá. Pokiaľ je tento parameter NULL a typ dát dwType je REG_SZ, zapíšu sa obsahy do implicitnej hodnoty.

DWORD Reserved: Rezervované, musí byť NULL.

DWORD dwType: Ukazovateľ na hodnotu DWORD, do ktorej sa uloží typ dát hodnoty. dwType môže byť NULL, ak sa nepožaduje žiadny typ dát, inak je to jedna z nasledujúcich hodnôt:

REG_BINARY – binárne dáta v ľubovoľnej forme.

REG_DWORD – 32-bitové číslo.

REG_DWORD_LITTLE_ENDIAN – 32-bitové číslo vo formáte little-endian (to isté ako REG_DWORD). V tomto formáte je najvyšší bajt najvýznamnejším bajtom slova. Toto je najvšeobecnejší formát pre počítače bežiace na systémoch Windows NT a Windows 95.

REG_DWORD_BIG_ENDIAN – 32-bitové číslo vo formáte big-endian. V tomto formáte je najnižší bajt najvýznamnejším bajtom slova.

REG_EXPAND_SZ – reťazec zakončený nulou, ktorý obsahuje nerozložené referencie pre premenné prostredia (napríklad: "%PATH%"). Či to bude Unicode alebo ANSI reťazec, závisí od toho, či použijete funkcie Unicode alebo ANSI. Windows 95 dovoľujú, aby tieto reťazce boli uložené, ale neboli automaticky rozšírené.

REG_LINK – symbolická linka pre iný podkľúč (Unicode symbolic link).

REG_MULTI_SZ – pole reťazcov zakončených nulou. Pole sa končí zdvojeným nulovým znakom.

REG_NONE – nedefinovaný typ.

REG_RESOURCE_LIST – device-driver resource list.

REG_SZ – reťazec zakončený nulou. Či to bude Unicode alebo ANSI reťazec, závisí od toho, či použijete funkcie Unicode alebo ANSI.

CONST BYTE *lpData: Ukazovateľ na dáta, ktoré je majú uložiť v hodnote. Uloženie dát v registri je limitované pamäťou. Rozsiahle hodnoty by mali byť uložené v súboroch a mená súborov by mali byť zapísané do registra.

DWORD cbData: Určuje veľkosť v bajtoch pre parameter lpData. Ak typ dát je REG_SZ, REG_EXPAND_SZ alebo REG_MULTI_SZ, cbData musí obsahovať veľkosť vrátane ukončovacieho nulového znaku.

Výsledok funkcie: LONG: Ak sa funkcia skončila úspešne, návratovou hodnotou je ERROR_SUCCESS, inak vráti kód chyby.

 

RegUnLoadKey

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

advapi32.lib

advapi32.inc

 

Funkcia RegUnLoadKey odstráni hive kľúč a jeho podkľúče z registra.

Syntax: LONG RegUnLoadKey, HKEY hKey, LPCTSTR lpSubKey

HKEY hKey: Kľúč, ktorý sa má odstrániť. Môže to byť HKEY_LOCAL_MACHINE, HKEY_USERS alebo návratová hodnota funkcie RegConnectRegistry, ktorá je uzlom registra na inom počítači.

LPCTSTR lpSubKey: Ukazovateľ na reťazec zakončený nulou, obsahujúci meno kľúča, ktorý sa má odstrániť. Budú tiež odstránené všetky podkľúče a hodnoty. Kľúč musí byť vytvorený pomocou funkcie RegLoadKey.

Výsledok funkcie: LONG: Ak sa funkcia skončila úspešne, návratovou hodnotou je ERROR_SUCCESS, inak vráti kód chyby.

INI súbory

Ak chcete uložiť informáciu o stave aplikácie tak, aby ste ju mohli pri ďalšom spustení programu obnoviť, môžete ju uložiť do súboru vo formáte,aký považujete za vhodný. No Windows poskytuje podporu pre ukladanie stavových informácií aplikácie – tzv. INI súbory.

Metóda zápisu do tzv. INI súborov pochádza z operačného systému Windows 3.1. Tieto súbory sa používali a stále sa používajú na uloženie dát systémovej konfigurácie. Položme si teda otázku:  Prečo sa INI súbory ešte stále používajú? Odpoveď je jednoduchá: bežnému používateľovi oveľa skôr vysvetlíte, že v danom INI súbore v adresári aplikácie si môže zmeniť nejaké parametre programu. Bežný používateľ totiž ani netuší, že existuje niečo ako systémový register, ktorý obsahuje údaje o jeho počítači. Samozrejme, z hľadiska Microsoftu sa podpora INI súborov zachovala iba z dôvodu kompatibility s Win16. Microsoft odporúča, aby aplikácie vo Win32 ukladali svoje konfiguračné dáta do systémového registra Windows. Aj napriek tomu Win32 API v plnom rozsahu podporuje INI súbory.

Štruktúra INI súborov

Časti vnútri INI súborov sa nazývajú sekcie a sú ohraničené reťazcom v hranatej zátvorke (pozri obrázok 1). Tento reťazec sa nazýva meno sekcie. Vnútri každej sekcie môže byť uložený akýkoľvek počet kľúčov. Kľúč predstavuje jedno konfiguračné nastavenie, ktoré môže byť nastavované alebo testované. Kľúč sa skladá z mena kľúča, znamienka rovnosti a hodnoty kľúča. Na jednom riadku sa môže nachádzať iba jeden kľúč. V INI súbore sú povolené aj komentáre. Riadok s komentárom sa musí začínať bodkočiarkou (opäť pozri obrázok). Bodkočiarka sa smie vyskytovať aj v hodnotách kľúča vnútri úvodzoviek, napríklad:

Color = “RED;GREEN;BLUE“

Medzi menom kľúča a znamienkom rovnosti alebo medzi hodnotu kľúča a znamienkom rovnosti môže byť vložený akýkoľvek počet medzier. Pri vyhľadávaní mien sekcie alebo mien kľúčov sa nerozlišujú veľké a malé písmená.

Väčšina INI súborov sa označuje ako súbory privátneho profilu. Tento pojem bol vytvorený vo Windows 3.1 na to, aby sa odlíšili aplikačné INI súbory od WIN.INI. Súbory privátneho profilu sú typicky uložené v adresári Windows alebo v adresári, kde je nainštalovaná aplikácia. Implicitne Windows hľadá INI súbor v adresári Windows. No pri volaní funkcie pre INI súbor privátneho profilu môže byť špecifikované úplné meno cesty pre INI súbor, takže INI súbory môžu byť umiestnené kdekoľvek na vašom disku. V nasledujúcom texte si opíšeme jednotlivé funkcie API na prácu s INI súbormi. Praktický príklad opäť nájdete na stránke www.pcrevue.sk v sekcii Programujeme ► Assembler pod Windows.

 

GetPrivateProfileInt

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

kernel32.lib

kernel32.inc

Funkcia GetPrivateProfileInt vráti hodnotu Integer spojenú s kľúčom zo špecifikovanej sekcie súboru privátneho profilu.

Syntax: UINT GetPrivateProfileInt, LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName

LPCTSTR lpAppName: Ukazovateľ na reťazec zakončený nulou, ktorý obsahuje meno sekcie.

LPCTSTR lpKeyName: Ukazovateľ na reťazec zakončený nulou, ktorý obsahuje meno kľúča.

INT nDefault: Implicitná hodnota, ktorú funkcia vráti, pokiaľ sa v zadanom INI súbore nenájde špecifikovaný kľúč.

LPCTSTR lpFileName: Reťazec zakončený nulou, ktorý obsahuje meno INI súboru. Ak parameter lpFileName neobsahuje úplne špecifikované meno cesty pre INI súbor, bude Windows hľadať tento súbor v adresári Windows.

Výsledok funkcie: UINT: Ak sa funkcia skončila úspešne, návratovou hodnotou je Integer. Ak sa kľúč nenájde, vráti sa implicitná hodnota nDefault. V prípade, že je hodnota kľúča menšia než nula, vráti sa nula.

 

GetPrivateProfileSection

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

kernel32.lib

kernel32.inc

Funkcia GetPrivateProfileSection vyplní buffer opisom kľúčov zo špecifikovanej sekcie INI súboru. Buffer sa bude skladať z množiny reťazcov zakončených nulou. Posledný reťazec je zakončený dvoma nulovými znakmi. Vo Windows 95 a Win32s nesmie veľkosť sekcie, ktorá sa má čítať, presiahnuť 32 KB. Windows automaticky uzamknú všetky aktualizácie INI súboru v dobe, keď sa z príslušnej sekcie kopírujú kľúče do buffera.

Syntax: DWORD GetPrivateProfileSection, LPCTSTR lpAppName, LPTSTR lpReturnedString,    DWORD nSize,          LPCTSTR lpFileName

LPCTSTR lpAppName: Ukazovateľ na reťazec zakončený nulou, ktorý obsahuje meno sekcie.

LPTSTR lpReturnedString: Ukazovateľ na buffer, do ktorého sa uloží obsah sekcie.

DWORD nSize: Veľkosť buffera lpReturnedString, do ktorého sa uložia dáta.

LPCTSTR lpFileName: Reťazec zakončený nulou, ktorý obsahuje meno INI súboru. Ak parameter lpFileName neobsahuje úplne špecifikované meno cesty pre INI súbor, bude Windows hľadať tento súbor v adresári Windows.

Výsledok funkcie: DWORD: Ak sa funkcia skončila úspešne, návratovou hodnotou je počet znakov kopírovaných do buffera. Do počtu nie je zahrnutá zakončovania nula. Ak nie je k dispozícii dostatok priestoru na uloženie všetkých kľúčov v sekcii, je návratová hodnota nSize – 2.

 

GetPrivateProfileSectionNames

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Nie

kernel32.lib

kernel32.inc

Funkcia GetPrivateProfileSectionNames vyplní buffer menami všetkých sekcií INI súboru. Obsahom buffera je zoznam reťazcov zakončených nulou. Za posledným menom sekcie nasledujú dva nulové znaky, čo značí koniec buffera. Pokiaľ sa vykonáva táto funkcia, systém zablokuje aktualizácie v INI súbore.  

Syntax: DWORD GetPrivateProfileSectionNames, LPTSTR lpszReturnBuffer, DWORD nSize, LPCTSTR lpFileName   

LPTSTR lpszReturnBuffer: Ukazovateľ na buffer, do ktorého sa uloží zoznam mien sekcie.

DWORD nSize: Veľkosť buffera lpszReturnBuffer, do ktorého sa uložia dáta.

LPCTSTR lpFileName: Reťazec zakončený nulou, ktorý obsahuje meno INI súboru privátneho profilu. Ak parameter lpFileName neobsahuje úplne špecifikované meno cesty pre INI súbor, bude Windows hľadať tento súbor v adresári Windows.

Výsledok funkcie: DWORD: Ak sa funkcia skončila úspešne, návratovou hodnotou je počet znakov kopírovaných do buffera. Do počtu nie je zahrnutá zakončovania nula. Ak nie je k dispozícii dostatok priestoru na uloženie všetkých mien sekcie, je návratová hodnota nSize – 2 a zoznam mien sekcie bude skrátený.

Literatúra

  1. Simon, R. J. – Gouker, M. – Barnes, B. C.: Win32 API. Zväzok 1, 2, 3. UNIS publishing, Brno 1997.
  2. Richter, J.: Windows pro pokročilé a experty. Computer Press, Praha 1997.
  3. Petzold, Ch.: Programování ve Windows – Win32 API. Computer Press, Praha 1999.

 


Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá