Ako používať Registry API uložiť a obnoviť nastavenia

Preklady článku Preklady článku
ID článku: 145679 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Hoci jazyka Visual Basic obsahuje funkcie SaveSetting a GetSetting chcete ušetriť a získať informácie z databázy registry, tieto funkcie iba pracovať na určitej časti databázy Registry, Visual Basic a VBA Nastavenia programu koreňový kľúč HKEY_CURRENT_USER.

Tento článok opisuje používanie 32-bitové Windows API funkcie, ktoré môžu byť používa na nastavenie a načítať hodnotám na ľubovoľné miesto v databáze registry. Témy a funkcia odkazy v tomto článku možno zovšeobecniť na program 16-bitové databázy registry.

32-Bitový API funkcie obsahuje tiež podporu pre bezpečnosť, hoci prehľad zabezpečenia je mimo rozsahu pôsobnosti tohto článku.

Poznámka: Funkcie SaveSetting a GetSetting nie sú súčasťou VBA funkcia knižnice. Však vzorky kód nižšie stále platí pre 32-bitové aplikácie, ktoré implementujú VBA.

DALSIE INFORMACIE

Všeobecné informácie databázy Registry

Databázy registry sa používajú aplikácie a Windows na ukladanie konfigurácie údaje. Je to náhrada pre veľké čísla INI súbory, ktoré rozšiřoval na Windows 3.x stroje a používa aj silne OLE.

Register je organizované pomocou hierarchicky sérií kľúče a hodnoty pripomínajúce strom. Každý kľúč začína jeden šesť preddefinovaných root kľúče, môžete mať sub-keys a hodnôt s ním spojené. Kľúče sú organizačné a pomenovanie jednotiek a zobrazia v Windows Registry redaktorov ako súborové priečinky. Hodnoty sú položky údajov a zobrazia ako textové položky v pravej table okna editora databázy Registry. Klávesy nemusia mať žiadne spojené hodnoty, ale môže mať veľa. Každá hodnota má pridružené údaje typu. Dve typy údajov najpoužívanejším databázy registry sú REG_SZ zakončený reťazec; a REG_DWORD, 32-bitové číslo.

Základný postup používaný na písať alebo čítať z miesta v databáze registry je podobne. Odkaz na daný kľúč alebo hodnotu, musia mať rukoväť na kľúč. Akonáhle táto rukoväť získa, hodnôt a sub-keys kľúča, Táto rukoväť odkazuje na môžete čítať, nastaviť alebo uvedené (enumerované).

Uvedené miesto v databáze registry na získanie popisovača k tomuto kľúču, musíte začať s jedným zo šiestich preddefinované kľúče (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG, a HKEY_DYN_DATA) a prechádzať stromu databázy registry, kým príslu?né tla?idlo dosiahla. Používateľské programy najčastejšie čítať a písať zo HKEY_CURRENT_USER a HKEY_LOCAL_MACHINE. Ak už existujú kľúče zaručovala, môžete použiť séria volaní funkcií, funkcia RegOpenKey alebo RegOpenKeyEx. Ak kľúče potrebné vytvoriť, funkcie RegCreateKey a RegCreateKeyEx robiť svoju prácu.

Rukoväť k po?adovanému tla?idlu, funkcie sa používajú na zoznam, nastaviť, a načítať informácie môžu byť povolaní. Vo všetkých prípadoch funkcie s Ex Prípona bude fungovať len na 32-bitové platformy. Funkcie bez prípony môže práca na 16-bitové a 32-bitové verzie systému Windows. Majte na pamäti, že nie všetky funkcie registry chýba prípona "Ex" sú funkcie ustanovené 16-bitové kompatibility. Ex prípona bol iba pridané schopnosti 16-bitové funkcie boli rozšírené. Funkcie, ktoré sú úplne nové a špecifické na 32-bitové platformy nevlastnia predĺženie Ex.

Funkcie RegSetValue a Funkcia RegSetValueEx umožňovať nastavenia s hodnotou modifikovať, zatiaľ čo RegQueryValue a RegQueryValueEx načítať aktuálne nastavenie hodnoty. Obmedzenia-Ex, 16-bitové verzie Tieto rozhrania API sú veľmi zreteľné tu. Ak používate 16-bitové RegSetValue funkcia nie je nijako názov hodnoty a z dôvodu tohto, RegSetValue nemožno použiť na viac ako jednu hodnotu pridružiť každý kľúč. okrem toho všetky hodnoty napísaný s RegSetValue mať typ údajov REG_SZ. Tieto obmedzenia sú inherentné s 16-bitové registrom. Funkcia RegSetValueEx umožňuje vytváranie viacerých počet hodnôt s akýkoľvek typ dostupných údajov.

Ako napísať do určeného umiestnenia databázy Registry

Po určení aké funkcie, budete musieť použiť pre svoj projekt, kópie príslušných vyhlasuje z kódu na konci tohto článku základný modul. Dva postupy Visual Basic zahrnuté (SetValueEx a QueryValueEx) sú balíčkov pre Funkcia RegSetValueEx a RegQueryValueEx API funkcie a výrazne zjednodušiť ich použitie. Poznámkach nižšie značka použiť tieto Visual Basic funkcie; ste však zdarma na volania priamo do API, ak si budete priať.

Vytváranie a úprava kľúčov a hodnôt:

S deklaráciami a postupy, ktoré sú k dispozícii, môžete vytvoriť a otvorte kľúče, a pridať, upraviť a odčítajú sa príslušné hodnoty. Troch nasledujúcich sekcií vysvetľujú, ako vytvoriť kľúč, nastaviť alebo zmeniť hodnotu a dotaz na hodnotu.

Vytvorením nového kľúča:

Vytvorenie nového kľúča je rovnako jednoduché ako použitím nasledovného postupu. CreateNewKey berie názov kľúča na vytvorenie a konštanta zastupujúci preddefinovaný kľúč na vytvorenie kľúča pod. Volanie RegCreateKeyEx nebude využívať bezpečnostných mechanizmov povolené, ale mohli byť zmenené tak urobiť. Diskusia k bezpe?nostných nastavení databázy Registry je mimo rozsahu pôsobnosti tohto článku.
   Private Sub CreateNewKey (sNewKeyName As String, lPredefinedKey As Long)
       Dim hNewKey As Long         'handle to the new key
       Dim lRetVal As Long         'result of the RegCreateKeyEx function

       lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, _
                 vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, _
                 0&, hNewKey, lRetVal)
       RegCloseKey (hNewKey)
   End Sub
				

S týmto postupom a call of:
   CreateNewKey "TestKey", HKEY_LOCAL_MACHINE
				

bude vytvorte kľúč s názvom TestKey bezprostredne pod HKEY_LOCAL_MACHINE.

Volanie CreateNewKey takhle:
      CreateNewKey "TestKey\SubKey1\SubKey2", HKEY_LOCAL_MACHINE
				

bude vytvárať vnorené troch klávesov začínajúci TestKey bezprostredne pod HKEY_CURRENT_USER, SubKey1 podriadených TestKey a SubKey3 podľa SubKey2.

Nastavenie/upravovania hodnoty:

Vytvorenie a nastavenie hodnoty zadaným kľúčom je možné vykonať s tieto krátke postup. SetKeyValue zastáva kľúč, že hodnota bude priradený názvu hodnoty, nastavenie hodnoty, a typ hodnoty (SetValueEx funkciu podporuje iba REG_SZ a REG_DWORD, ale to môže byť upravené v prípade potreby). Určuje novú hodnotu pre existujúce sValueName bude upravovať aktuálne nastavenie tejto hodnoty.
   Private Sub SetKeyValue (sKeyName As String, sValueName As String, _
   vValueSetting As Variant, lValueType As Long)
       Dim lRetVal As Long         'result of the SetValueEx function
       Dim hKey As Long         'handle of open key

       'open the specified key
       lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, _
                                 KEY_SET_VALUE, hKey)
       lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
       RegCloseKey (hKey)
   End Sub
				

Hovoru z:
   SetKeyValue "TestKey\SubKey1", "StringValue", "Hello", REG_SZ
				

bude vytvárať hodnotu typu REG_SZ nazýva "StringValue" s stanovenie "Ahoj." Táto hodnota môže byť spojené s kľúčovým SubKey1 "TestKey."

V tomto prípade, "TestKey" je podkľúčom HKEY_CURRENT_USER, ale môže to byť upraviť zmenou volanie RegOpenKeyEx. Toto volanie zlyhá, ak "TestKey\SubKey1" neexistuje. Chcete vyhnúť tomuto problému, použite volanie RegCreateKeyEx namiesto z volania RegOpenKeyEx. Otvorí sa RegCreateKeyEx Zadaný kľúč, ak už existuje.

Zisťuje hodnota:

Nasledujúci postup môžete použiť zistiť nastavenie existujúcej hodnota. Hodnota dotazu trvá názov kľúča a názov hodnoty priradený tento kľúč a zobrazí hlásenie rámček s príslušnými hodnota. Využíva hovor QueryValueEx wrapper funkcie definovaných nižšie, ktoré podporuje iba typy REG_SZ a REG_DWORD.
   Private Sub QueryValue (sKeyName As String, sValueName As String)
       Dim lRetVal As Long         'result of the API functions
       Dim hKey As Long         'handle of opened key
       Dim vValue As Variant      'setting of queried value

       lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, _
   KEY_QUERY_VALUE, hKey)
       lRetVal = QueryValueEx(hKey, sValueName, vValue)
       MsgBox vValue
       RegCloseKey (hKey)
   End Sub
				

S týmto postupom call of:
   QueryValue "TestKey\SubKey1", "StringValue"
				

zobrazí hlásenie s aktuálne nastavenie "StringValue" hodnota a predpokladá, že "StringValue" existuje v kľúči "TestKey\SubKey1".

Ak neexistuje hodnotu, ktorú ste dotaz, potom vráti hodnota dotazu kód chyby 2 - "ERROR_BADKEY".

Dodatočné poznámky:

Uvedené príklady používajú rozšírené 32-bitové verzie databázy Registry funkcie výlučne. Tieto funkcie umožňujú viac ako jednu hodnotu sa spojené s každý kľúč. Ako sa uvádza vyššie, 16-bitový RegSetValue a RegQueryValue zákon o jednu hodnotu spojené s aktuálny kľúč (ktoré je vždy typu REG_SZ). Tieto funkcie zobrazia v 32-bitové Editor databázy Registry s názvom <no name="">. Ak chcete nastaviť, upraviť alebo dotaz na to špeciálne súvisiace hodnoty, treba použiť funkcie 16-bitové registry. Čítanie a zápis z databázy registry v 16-bitovom prostredí je oveľa jednoduchší než v 32-bitovom prostredí. Rovnaký základný postup sa použije: otvoriť kľúč a získať popisovač a potom volajte modifikácia funkcia s popisovača, ale žiadne posúdenie potreby vykonať na viacnásobné spojené hodnoty alebo pre inú hodnotu typy údajov. 16-Bitová aplikácia môže vytvoriť a upraviť kľúčov a hodnôt s vyhláseniami RegCreateKey, Funkcia RegOpenKey, RegQueryValue, RegSetValue a RegCloseKey funkcie. </no>

V niektorých prípadoch nie je potrebné pre všetky hodnoty súvisieť s kľúčom. Žiadosť môže len potrebujete vedieť, či existuje určité kľúč alebo hodnotu, a nie starostlivosť o povahe kľúčové hodnoty. V situácii ako je táto, RegEnumKey, RegEnumKeyEx a RegEnumValue funkcie môže byť použitá na určenie, či určité kľúč alebo hodnotu existuje. Ďalšie informácie o tieto funkcie vzťahujú na odkaz na API Text Viewer a/alebo Windows API.

API funkcie a konštantnej vyhlásenia

   Option Explicit

   Public Const REG_SZ As Long = 1
   Public Const REG_DWORD As Long = 4

   Public Const HKEY_CLASSES_ROOT = &H80000000
   Public Const HKEY_CURRENT_USER = &H80000001
   Public Const HKEY_LOCAL_MACHINE = &H80000002
   Public Const HKEY_USERS = &H80000003

   Public Const ERROR_NONE = 0
   Public Const ERROR_BADDB = 1
   Public Const ERROR_BADKEY = 2
   Public Const ERROR_CANTOPEN = 3
   Public Const ERROR_CANTREAD = 4
   Public Const ERROR_CANTWRITE = 5
   Public Const ERROR_OUTOFMEMORY = 6
   Public Const ERROR_ARENA_TRASHED = 7
   Public Const ERROR_ACCESS_DENIED = 8
   Public Const ERROR_INVALID_PARAMETERS = 87
   Public Const ERROR_NO_MORE_ITEMS = 259

   Public Const KEY_QUERY_VALUE = &H1
   Public Const KEY_SET_VALUE = &H2
   Public Const KEY_ALL_ACCESS = &H3F

   Public Const REG_OPTION_NON_VOLATILE = 0

   Declare Function RegCloseKey Lib "advapi32.dll" _
   (ByVal hKey As Long) As Long
   Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias _
   "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions _
   As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes _
   As Long, phkResult As Long, lpdwDisposition As Long) As Long
   Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
   "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As _
   Long) As Long
   Declare Function RegQueryValueExString Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As String, lpcbData As Long) As Long
   Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, lpData As _
   Long, lpcbData As Long) As Long
   Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As Long, lpcbData As Long) As Long
   Declare Function RegSetValueExString Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As _
   String, ByVal cbData As Long) As Long
   Declare Function RegSetValueExLong Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, _
   ByVal cbData As Long) As Long
				

SetValueEx a QueryValueEx Wrapper funkcií:
   Public Function SetValueEx(ByVal hKey As Long, sValueName As String, _
   lType As Long, vValue As Variant) As Long
       Dim lValue As Long
       Dim sValue As String
       Select Case lType
           Case REG_SZ
               sValue = vValue & Chr$(0)
               SetValueEx = RegSetValueExString(hKey, sValueName, 0&, _
                                              lType, sValue, Len(sValue))
           Case REG_DWORD
               lValue = vValue
               SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, _
   lType, lValue, 4)
           End Select
   End Function

   Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As _
   String, vValue As Variant) As Long
       Dim cch As Long
       Dim lrc As Long
       Dim lType As Long
       Dim lValue As Long
       Dim sValue As String

       On Error GoTo QueryValueExError

       ' Determine the size and type of data to be read
       lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
       If lrc <> ERROR_NONE Then Error 5

       Select Case lType
           ' For strings
           Case REG_SZ:
               sValue = String(cch, 0)

   lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, _
   sValue, cch)
               If lrc = ERROR_NONE Then
                   vValue = Left$(sValue, cch-1)
               Else
                   vValue = Empty
               End If
           ' For DWORDS
           Case REG_DWORD:
   lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, _
   lValue, cch)
               If lrc = ERROR_NONE Then vValue = lValue
           Case Else
               'all other data types not supported
               lrc = -1
       End Select

   QueryValueExExit:
       QueryValueEx = lrc
       Exit Function

   QueryValueExError:
       Resume QueryValueExExit
   End Function
				

ODKAZY

Programovanie Windows 95 užívateľské rozhranie, kapitola 10-"pomocou Register"

Pre funkciu odkazy: akékoľvek Sprievodca Win16 alebo rozhranie API systému Win32.

Vlastnosti

ID článku: 145679 - Posledná kontrola: 17. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic for Applications 6.0
Kľúčové slová: 
kbcode kbhowto kbtophit kbmt KB145679 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:145679

Odošlite odozvu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com