본문 바로가기

work/vb

레지스트리의 데이터를 간단히 읽는 소스

책에 있는 소스를 거의 그대로 올렸습니다.
이 함수를 이용하면 대부분의 레지의 데이터를 쉽게 읽어들일수 있습니다.
폼에 쓰세요. 32비트 함수들을 이용했기 때문에 속도도 빠르리라 예상됩니다. 모듈에
쓸때는 Private function을 Public fuction으로 고치세요.
프린터니 사용자 이름이니 버젼같은건 이걸 쓰면 값을  쉽게 알아낼 수 있습니다.. 키
와 데이터가 어디 있는지 알아야겠지만요..

사용법: 데이터=ReadRegData$(루트키, 하위키, 값(value))

Option Explicit

Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA"
(ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwReserved As Long, ByVal
samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32"
Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName$, ByVal
lpdwReserved As Long, lpdwType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long

Const HKEY_CLASSES_ROOT = &H80000000

Private Function ReadRegData$(ByVal hInKey&, ByVal SubKey$, ByVal valname$)
   Dim RetVal$, hSubKey&, dwType&, SZ&, R&, v$
   Const KEY_ALL_ACCESS As Long = &HF0063
   Const ERROR_SUCCESS As Long = 0
   Const REG_SZ As Long = 1
   RetVal$ = ""
   "레지스트리 키를 오픈함.
   R = RegOpenKeyEx(hInKey, SubKey$, 0, KEY_ALL_ACCESS, hSubKey)
   If R <> ERROR_SUCCESS Then GoTo Quit_Now
   Size = 256
   v$ = String$(SZ, 0)
   "레지스트리를 읽음.
   R = RegQueryValueEx(hSubKey, valname$, 0, dwType, ByVal v$, Size)
   If R = ERROR_SUCCESS And dwType = REG_SZ Then
       "이상하게 SZ대신에 256을 넣으면 제값이 안나온다..--;
       RetVal$ = Left$(v$, SZ)
   End If
   "레지스트리 키를 닫음.
   If hInKey = 0 Then R = RegCloseKey(hSubKey)
Quit_Now:
   RegGetString$ = RetVal$
End Function