레지스트리 API를 사용하여 저장 및 검색 설정 방법

기술 자료 번역 기술 자료 번역
기술 자료: 145679 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

Visual Basic 저장하고 정보를 레지스트리에서 검색할 SaveSetting 및 GetSetting 함수가 포함되어 있지만 이러한 함수는 Visual Basic 및 VBA 프로그램 설정의 HKEY_CURRENT_USER 루트 키의 레지스트리 특정 구역 경우에만 작동합니다.

이 문서에서는 설정하고 어디에서든 값을 검색하는 데 사용할 수 있는 32 비트 Windows API 함수 사용하여 설명합니다 레지스트리의. 16 비트 프로그램 레지스트리 항목 및 함수 참조를 이 문서의 일반화되어 수 있습니다.

보안 개요를 이 기사의 범위를 외부에 있지만 32 비트 API 함수를 또한 보안, 지원합니다.

참고: SaveSetting 및 GetSetting 함수를 VBA 함수는 라이브러리의 일부가 아닌. 그러나 아래의 샘플 코드를 계속 VBA 구현하는 32 비트 응용 프로그램에 적용됩니다.

추가 정보

일반 레지스트리 정보

레지스트리 응용 프로그램과 Windows 구성 데이터를 저장하는 데 사용됩니다. 많은 수의 Windows 3.x 시스템에서 proliferated 또한 OLE에서 많이 사용되는 INI 파일 대체하는 것입니다.

레지스트리 키 및 값을 트리 유사한 계층적 일련의 사용하여 구성됩니다. 여섯 개의 미리 정의된 루트 키 중 하나를 시작하는 각 키를 sub-keys 및 관련 값을 가질 수 있습니다. 키 이름 및 조직 구성 단위 및 Windows 레지스트리 편집기 파일 폴더로 나타납니다. 값 데이터 항목 및 레지스트리 편집기 창의 오른쪽 창에서 텍스트 항목으로 나타납니다. 키가 연결된 값이 있어야 하는 있지만 많을 수 있습니다. 각 값은 관련된 데이터 형식을 갖습니다. 두 개의 가장 일반적으로 사용되는 레지스트리 데이터 형식을 REG_SZ, null로 끝나는 문자열을; REG_DWORD, 32 비트 수는 있습니다.

쓰기 또는 다음 레지스트리 위치에 읽는 데 사용되는 기본 프로세스는 동일합니다. 지정된 키 또는 값을 참조하려면 키 핸들이 있어야 합니다. 이 핸들을 얻은 후에는 값과 이 핸들이 참조하는 키의 sub-keys, 설정, 읽거나 수 (열거) 나열된.

그 키에 대한 핸들을 가져오려면 다음 레지스트리 위치에 지정된 여섯 개의 미리 정의된 키 (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG 및 HKEY_DYN_DATA) 중 하나로 시작해야 하며 원하는 키를 도달할 때까지 레지스트리 트리를 찾아 들어가지 합니다. 사용자 프로그램 가장 자주 읽고 HKEY_CURRENT_USER 및 HKEY_LOCAL_MACHINE 씁니다. 통과한 중인 키가 이미 존재할 경우 일련의 RegOpenKey 또는 RegOpenKeyEx 함수 호출 사용할 수 있습니다. 키를 만들어야 할 경우, RegCreateKey 및 RegCreateKeyEx 함수를 작업을 수행합니다.

원하는 키 핸들은 가진 목록, 집합 및 검색 정보를 사용하는 함수는 호출할 수 있습니다. 모든 경우에 함수를 Ex 접미사 사용하여 32 비트 플랫폼에서만 사용할 수 있습니다. 접미사 없이 함수를 16비트 및 32비트 버전의 Windows에서 작동하지 않을 수 있습니다. '예' 접미사가 없는 모든 레지스트리 함수는 16비트 호환성을 위해 제공되는 함수입니다 염두에 두십시오. 확장된 16비트 함수의 기능이 있던 때 Ex 접미사는 경우에만 추가되었습니다. 32 비트 플랫폼을 완전히 새롭게 특정 함수는 Ex 확장명을 작업을지 않습니다.

RegSetValue 및 RegSetValueEx 함수를 설정을 값 RegQueryValue 및 RegQueryValueEx 현재 설정 값을 검색하는 동안, 수정할 수 있습니다. 비-Ex 제한, 이러한 API 16비트 버전의 매우 뚜렷하게 같습니다. 16 비트 RegSetValue 함수를 사용하면 값, 이름 방법이 있으며 이 때문에 RegSetValue 각 키와 값을 두 개 이상 연결하는 데 사용할 수 없습니다. 또한, RegSetValue 사용하여 작성된 모든 값은 REG_SZ 데이터 형식을 가집니다. 이러한 16비트 레지스트리 고유의 제한입니다. RegSetValueEx 여러 숫자로 값의 모든 사용 가능한 데이터 형식 만들 수 있습니다.

특정 레지스트리 위치에 쓰기 방법

프로젝트에 사용할 필요가 기능 결정한 후 해당 관련 복사 코드에서 이 문서의 끝에 기본 모듈을 선언합니다. 포함되어 있는 두 Visual Basic 프로시저 (SetValueEx 및 QueryValueEx) RegSetValueEx 및 RegQueryValueEx API 함수에 래퍼입니다 및 사용을 크게 단순화할. 그러나 노트 만들기 아래에 이러한 VBA 함수를 사용하여, 사용자가 원하는 경우 API를 직접 호출할 수 있습니다.

만들기 수정 키 및 값:

선언 및 절차를 사용할 수 있는 만들기 및 키, 열 및, 수정, 추가하고 있습니다 값을 읽을. 다음 절에서는 세 가지 키를 만들 설정 또는 값을 수정하고 값을 쿼리하는 방법에 대해 설명합니다.

새 키 만들기:

간단한 다음 절차를 사용하여 새 키를 만들 수 있습니다. CreateNewKey 이름을 만들려면, 키 및 키 아래에 만들려면 미리 정의된 키를 나타내는 상수를 사용합니다. RegCreateKeyEx에 대한 호출을 허용, 보안 메커니즘을 이용할 않는 있지만 이렇게 하려면 수정할 수 있습니다. 레지스트리 보안 논의는 본 이 문서에서는 다루지 않습니다.
   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
				

호출 중 a 이 절차를 사용하여:
   CreateNewKey "TestKey", HKEY_LOCAL_MACHINE
				

즉시 HKEY_LOCAL_MACHINE 아래 TestKey 라는 키를 만듭니다.

CreateNewKey 다음과 같은 호출:
      CreateNewKey "TestKey\SubKey1\SubKey2", HKEY_LOCAL_MACHINE
				

HKEY_CURRENT_USER 즉시, 하위 TestKey, SubKey1 TestKey 및 SubKey3 SubKey2에서 시작하는 세 개의 중첩된 키를 만듭니다.

값 수정/설정:

만들고 지정된 키의 값을 설정하면 다음과 같은 간단한 절차를 수행할 수 있습니다. SetKeyValue 값을 값과 값 (REG_SZ REG_DWORD, 있지만 이 필요한 경우 수정할 수 있는 SetValueEx 함수 유일한 지원하는) 형식 설정 값의 이름을 함께 연결될 키를 사용합니다. 기존 sValueName에 대해 새 값을 지정하면 해당 값은 현재 설정을 수정합니다.
   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
				

호출 중:
   SetKeyValue "TestKey\SubKey1", "StringValue", "Hello", REG_SZ
				

"Hello" 설정을 사용하여 "StringValue" 라는 REG_SZ 형식의 값을 만듭니다. 이 값은 "TestKey" 키를 SubKey1 사용하여 연결되지 것입니다.

이 경우 "TestKey" HKEY_CURRENT_USER, 하위 있지만 RegOpenKeyEx에 대한 호출을 변경하여 수정할 수 있습니다. "TestKey\SubKey1" 존재하지 않는 경우 이 호출은 실패합니다. 이 문제를 방지하려면 RegCreateKeyEx에 대한 호출이 RegOpenKeyEx 호출하는 대신 사용하십시오. 이미 있는 경우 RegCreateKeyEx 지정한 키를 엽니다.

값 쿼리:

다음 절차에서는 기존 값 설정을 확인하는 데 사용할 수 있습니다. 쿼리값 키 이름과 해당 키와 연결된 값 다음 해당 값 가진 메시지 상자를 표시합니다. REG_SZ 및 REG_DWORD 형식만 지원합니다 QueryValueEx 래퍼 함수, 아래에 정의된 호출이 사용합니다.
   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
				

이 절차를 사용하여 호출 중:
   QueryValue "TestKey\SubKey1", "StringValue"
				

"StringValue" 값이 현재 설정으로 메시지 상자가 표시되며 "StringValue" 의 "TestKey\SubKey1" 키로 있다고 가정합니다.

다음 값 쿼리할 존재하지 않는 경우 쿼리값 2 - 'ERROR_BADKEY' 오류 코드를 반환합니다.

추가 정보:

위의 예제에서는 단독으로 확장된 32비트 버전의 레지스트리 함수 사용합니다. 이러한 함수는 각 키와 관련된 값을 두 개 이상 있습니다. 위에서 설명한 것처럼 16 비트 RegSetValue 및 RegQueryValue 현재 키 (항상 REG_SZ 형식입니다) 와 연결된 단일 값에 역할을 합니다. 이러한 함수는 < NO NAME > 이름 가진 32비트 레지스트리 편집기에 나타납니다. 설정, 수정 또는 이 특수 연결된 값을 쿼리할 하나를 16비트 레지스트리 함수를 사용해야 합니다. 16 비트 환경에서 레지스트리에서 읽고 훨씬 넘는 32 비트 환경에서 간단합니다. 동일한 기본 절차를 다음에: 키를 열고 및 대한 핸들을 얻는 다음 해당 핸들을 있지만 여러 관련 값을 다른 값으로 데이터 형식에 대해 만들 수 없음 고려해야 할 요구 사용자 수정 함수를 호출합니다. 16비트 응용 프로그램을 만들고 키 및 값을 RegCreateKey, RegOpenKey, RegQueryValue, RegSetValue, RegCloseKey 및 함수 선언 사용하여 수정할 수 있습니다.

경우에 따라서는 있습니다 키를 사용하여 연결된 모든 값이 필요하지 않습니다. 응용 프로그램에 대해서만 특정 키 또는 값, 존재하고 키의 값 특성에 대한 주의를 경우 알아야 할 수 있습니다. 이 경우 RegEnumKey, RegEnumKeyEx, RegEnumValue 함수는 특정 키 또는 값 존재 여부를 확인하는 데 사용할 수 있습니다. 이러한 함수에 대한 자세한 내용은 API 텍스트 뷰어 및 Windows API 참조를 참조하십시오.

API 함수 및 상수 선언

   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 및 QueryValueEx 래퍼 함수:
   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
				

참조

Windows 95 사용자 레지스트리를 사용하여 인터페이스를 10장 - 프로그래밍

함수 참조: 모든 안내선에 Win16 또는 Win32 API.

속성

기술 자료: 145679 - 마지막 검토: 2004년 7월 15일 목요일 - 수정: 1.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
  • Microsoft Visual Basic for Applications 5.0
  • Microsoft Visual Basic for Applications 6.0
키워드:?
kbmt kbcode kbhowto kbtophit KB145679 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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