Jak použít k uložení a načtení nastavení registru rozhraní API

Překlady článku Překlady článku
ID článku: 145679 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Přestože jazyka Visual Basic obsahuje funkce SaveSetting a GetSetting ukládání a načítání informací z registru, pouze tyto funkce působit na určitou část registru, Visual Basic a VBA Nastavení programu kořenového klíče HKEY_CURRENT_USER.

Tento článek popisuje použití funkce rozhraní API systému Windows 32 bitů, které mohou být slouží k nastavení a načtení hodnot z libovolného místa v registru. Témata a funkce odkazy v tomto článku může být zobecněna do programu 16-bit registru.

Funkce rozhraní API 32-bit také zahrnují podporu zabezpečení, přestože Přehled zabezpečení je mimo rámec tohoto článku.

Poznámka: Funkce SaveSetting a GetSetting nejsou součástí jazyka VBA Funkce knihovny. Však ukázkový kód pod stále platí pro 32bitové verze aplikace, které implementují VBA.

Další informace

Obecné informace o registru

Registr je používán aplikací a systému Windows k uložení konfigurace data. Je že nahrazení velkého počtu INI, soubory proliferated v systému Windows 3.x stroje a používá také silně OLE.

Uspořádání pomocí hierarchické řady klíčů a hodnot registru podobné stromu. Každý klíč začínající jeden šest předdefinovaných kořenového klíče, může mít v podklíčích a hodnoty, které jsou s ním spojené. Klíče jsou organizační a pojmenování jednotek v editory registru systému Windows jako složky souborů. Hodnoty jsou datové položky a jsou zobrazeny jako text položky v pravém podokně okna Editor registru. Klíče nemusí mít všechny přidružené hodnoty, ale může mít mnoho. Každá hodnota má přiřazeny typy dat. Dvě registr nejčastěji používané datové typy jsou REG_SZ, zakončené znakem null řetězec; a REG_DWORD 32bitové číslo.

Základní postup pro zápis nebo čtení z umístění v registru je totéž. Chcete-li odkazovat na libovolný daný klíč nebo hodnotu, musí mít popisovač klíč. Po získání tohoto popisovače hodnoty a podklíčích klíče, Tento popisovač odkazuje můžete číst, nastavení nebo uvedené (výčet).

Umístění v registru, získat popisovač pro tento klíč uveden, je nutné Začněte s jednou z šesti předdefinované klíče (HKEY_CLASSES_ROOT, HKEY_USERS HKEY_CURRENT_USER HKEY_LOCAL_MACHINE, HKEY_CURRENT_CONFIG, a HKEY_DYN_DATA) a procházet stromu registru, dokud nebude požadovaný klíč bylo dosaženo. Programy uživatele nejčastěji čtení a zápis z HKEY_CURRENT_USER a HKEY_LOCAL_MACHINE. Pokud je provázán klíče již existuje, můžete použít posloupnost volání funkce RegOpenKey nebo RegOpenKeyEx funkcí. Pokud klíče musí být vytvořena, RegCreateKey a RegCreateKeyEx funkce proveďte úlohy.

S popisovačem požadovaný klíč, funkce pro seznam, nastavení, a načíst informace lze volat. Ve všech případech funkce s Ex přípona bude fungovat pouze na 32bitových platformách. Funkce bez přípony práce na 16bitové a 32bitové verze systému Windows. Uvědomte si, že není všechny funkce registru chybí přípona "Ex", jsou funkce, které jsou stanovené 16-bit kompatibility. Ex přípona byla přidána, pouze když schopnosti 16bitových funkcí byly rozšířeny. Funkce, které jsou zcela nová a zvláštní na 32bitových platformách nesmí mít příponu Ex.

Funkce RegSetValue a funkce RegSetValueEx povolit nastavení hodnoty Chcete-li změnit, zatímco načíst RegQueryValue a RegQueryValueEx aktuální nastavení hodnoty. Omezení non-Ex, 16bitové verze Tato rozhraní API jsou velmi zřejmé zde. Při použití RegSetValue 16 bitů funkce není žádným způsobem název hodnoty a proto tento, RegSetValue nelze přiřadit více než jednu hodnotu každého klíče. Kromě toho všechny hodnoty, které jsou zapsány s RegSetValue mít typ dat REG_SZ. Tyto omezení jsou spojená s 16-bit registru. Umožňuje funkce RegSetValueEx Vytvoření více počet hodnot u jakéhokoli typu dat jsou k dispozici.

Způsob zápisu do určitého umístění registru

Po zjištění o funkcích, které budete muset použít projektu, kopie příslušných prohlašuje z kódu na konci tohoto článku základní modul. Dvě procedury jazyka Visual Basic, které jsou součástí (SetValueEx a QueryValueEx) jsou obálky pro funkce RegSetValueEx a rozhraní API RegQueryValueEx funkce a výrazně usnadňuje jejich použití. Poznámky pod značku používat tyto Funkce jazyka Visual Basic; je však zdarma volat přímo Rozhraní API, pokud chcete.

Vytvoření nebo změna klíčů a hodnot:

Prohlášení a postupy, které jsou k dispozici můžete vytvořit a spustit klíče, přidat, upravit a načíst hodnoty. Následující tři oddíly Vysvětluje, jak vytvořit klíč, nastavit nebo změnit hodnotu a dotaz na hodnotu.

Program vytváří nový klíč:

Vytvoření nového klíče je stejně jednoduché jako pomocí následujícího postupu. CreateNewKey převezme název klíče k vytvoření a konstanty představuje předdefinovaný klíč k vytvoření klíče pod klíčem. Volání RegCreateKeyEx nevyužívá mechanismy zabezpečení povoleno, ale je možné upravovat tak učinit. Diskusi o zabezpečení registru je mimo rámec tohoto č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
				

Pomocí tohoto postupu a volání:
   CreateNewKey "TestKey", HKEY_LOCAL_MACHINE
				

vytvoří klíč nazvaný TestKey pod HKEY_LOCAL_MACHINE.

Volání CreateNewKey následujícím způsobem:
      CreateNewKey "TestKey\SubKey1\SubKey2", HKEY_LOCAL_MACHINE
				

vytvoří vnořené tři klíče, počínaje TestKey pod HKEY_CURRENT_USER, SubKey1 podřízené TestKey a SubKey3 pod SubKey2.

Nastavení a úpravy hodnoty:

Vytvoření a nastavení hodnoty zadané klíče lze dosáhnout záložním bateriovým Následující krátký postup. SetKeyValue trvá klíč hodnota budou přidruženy, název hodnoty, nastavení hodnoty, a typu hodnoty (REG_SZ podporuje pouze funkci SetValueEx a REG_DWORD, ale to může měnit v případě potřeby). Zadání nové hodnoty pro sValueName existující změní aktuální nastavení této 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
				

Výzvy:
   SetKeyValue "TestKey\SubKey1", "StringValue", "Hello", REG_SZ
				

vytvoří hodnotu typu REG_SZ, nazývané "String" s nastavením "Ahoj." Tato hodnota bude spojena s klíči SubKey1 "testkey".

V tomto případě "testkey" je podklíč HKEY_CURRENT_USER, ale může to být změnit úpravou RegOpenKeyEx volání. Toto volání se nezdaří, pokud "testkey\subkey1" neexistuje. Chcete-li se tomuto problému vyhnout, použijte volání RegCreateKeyEx namísto volání RegOpenKeyEx. Otevře se RegCreateKeyEx Zadaný klíč, pokud již existuje.

Dotaz na hodnotu:

V dalším postupu lze zjistit nastavení existujícího hodnota. QueryValue přebírá název klíče a název hodnoty spojené s tímto klíčem a zobrazí zprávu pole s odpovídajícím hodnota. Používá volání funkce QueryValueEx obal, definovaných níže, který podporuje pouze typu 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
				

Tento postup výzvy:
   QueryValue "TestKey\SubKey1", "StringValue"
				

Zobrazí okno s aktuálním nastavením "String" hodnotu a předpokládá, že "String" existuje v klíči "testkey\subkey1".

Pokud hodnota dotazu neexistuje, pak vrátí QueryValue Kód chyby 2 - "error_badkey".

Další poznámky:

Výše uvedené příklady použití rozšířených 32bitové verze registru výhradně funguje. Tyto funkce umožňují více než jednu hodnotu přiřazené každému klíči. Jak již bylo uvedeno výše, RegSetValue 16 bitů a RegQueryValue aktu jedné hodnoty spojené s aktuální klíč (který je vždy typu REG_SZ). Tyto funkce se zobrazí v 32-bit Editor registru s názvem <no name="">. Chcete-li nastavit, upravit nebo tento dotaz zvláštní přidružené hodnoty, musí se použít funkce registru 16bitové. Čtení a zápis z registru v 16bitové prostředí je velmi je jednodušší než v 32bitové prostředí. Stejný postup je uveden: otevřít klíč a získání popisovače a potom volat funkci změny popisovače, ale bez zřetele na musí být stanovena pro více souvisejících hodnoty nebo hodnoty různých datových typů. 16Bitové aplikace můžete vytvořit. a změna klíčů a hodnot a prohlášení RegCreateKey, Funkce RegOpenKey RegQueryValue, RegSetValue a RegCloseKey funkce. </no>

V některých případech není nutné pro všechny hodnoty, které bude spojeno s klíčem. Aplikace může pouze potřebujete vědět, pokud existuje určité klíče nebo hodnoty, a není péče o povaze hodnoty v klíči. V situaci Funkce RegEnumKey, Funkce RegEnumKeyEx a RegEnumValue lze provádět Zjistěte, zda existuje určité klíče nebo hodnoty. Další informace o Tyto funkce naleznete v referenční rozhraní API textového prohlížeče nebo rozhraní API systému Windows.

Funkce rozhraní API a deklarací konstant

   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 funkcí:
   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

Programování uživatelského rozhraní systému Windows 95, kapitola 10-"použití Registru"

Pro funkci odkazy: libovolnému vodítku Win16 nebo rozhraní Win32 API.

Vlastnosti

ID článku: 145679 - Poslední aktualizace: 23. dubna 2011 - Revize: 3.0
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbcode kbhowto kbtophit kbmt KB145679 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:145679

Dejte nám zpětnou vazbu

 

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