Đăng Nhập

Vui lòng khai báo chính xác tên truy cập và mật khẩu!

Quên mật khẩu?

    Hướng dẫn xử lý Registry trong VB6

      Hoạt Động Tốt
      girlbaby

      Giới tính : Nữ

      Tuổi : 33

      Đến từ : HCM-bt

      Ngày Tham gia : 15/07/2011

      Tổng số bài gửi : 75

      #1

       Tue Jul 19, 2011 10:02 am

      Hướng dẫn xử lý Registry trong VB6


      Một chút về Registry
      Bình thường Registry gồm có 5 khóa cơ sở đó là



      Code:

      1) HKEY_CLASSES_ROOT Thông tin hệ điều hành
      2) HKEY_CURRENT_CONFIG Thông tin cấu hình hiện tại của máy tính
      3) HKEY_LOCAL_MACHINE Thông tin các chương trình cho mọi người dùng
      4) HKEY_CURRENT_USER Thông tin các chương trình cho người dùng hiện tại
      5) HKEY_USERS Thông tin cho tất cả người dùng





      Hướng dẫn xử lý Registry trong VB6 SinhVienIT.Net---aa%281%29
      Mỗi khóa cơ sở chứa các khóa con, mỗi khóa con lại chứa các khóa con với
      lớp thấp hơn. Vì vậy nên một khóa bất kỳ trong registry có thể là khóa
      con của khóa này nhưng cũng có thể là khóa cha của khóa kia.
      Trong một khóa có thể có một hay nhiều giá trị (String Value). Giá trị
      (Default) là giá trị luôn có trong một khóa. Mỗi giá trị đó có mỗi dữ
      liệu riêng tương ứng với kiểu dữ liệu của nó, đây là phần quan trọng
      nhất của registry . Trong registry có nhiều kiểu dữ liệu, phổ biến là.



      Code:

      1) REG_BINARY Một dãy bit thông tin
      2) REG_DWORD Một số nguyên 32 Bit
      3) REG_SZ Một chuổi Unicode
      4) REG_MULTI_SZ Nhiều chuổi Unicode






      Visual Basic đã cung cấp 4 hàm để xử lý Registry



      Code:

      1. GetAllSettings (appname, section)





      Chức năng: lấy tất cả các thông tin của appname trong registry.
      Ví dụ lấy các thông tin trong khóa Startup của Myapp



      Code:

      MySettings = GetAllSettings("MyApp", "Startup")








      Code:

      2. GetSetting (appname, section, key [, default])





      Chức năng, lấy thông tin được lưu trong key, thuộc khóa section của
      appname, giá trị default (có thể bỏ qua) là giá trị trả về nếu thông tin
      muốn lấy về không có trong registry
      Ví dụ

      Code:



      MySettings = GetSetting(“MyApp", “Startup","Left", "25")








      3. SaveSetting appname, section, key, setting
      Chức năng: Lưu thông tin trong registry
      Ví dụ



      Code:

      SaveSetting "MyApp", "Startup", "Left", 50





      4. DeleteSetting appname, section [, key]
      Chức năng, xóa khóa section trong appname
      Ví dụ xóa thông tin của MyApp trong khóa Startup



      Code:

      DeleteSetting "MyApp", "Startup"






      Thực chất thì các giá trị registry được lưu trong khóa
      HKEY_CURRENT_USER\Software\VB and VBA Program Settings. Còn nếu muốn làm
      việc trên các khóa khác thì ta phải dùng một số hàm API để xử lý. Chú ý
      tất cả các hằng, các biến kiểu, các hàm dưới đây bạn phải thêm từ khóa
      là Private ở phía trước nếu muốn dùng trong Form, và Private hoặc là
      Public nếu bạn dùng trong một Module. Và trong một số ví dụ tôi sẻ bỏ
      qua những phần khai báo chúng .

      Giới thiệu vài hằng số thông dụng trong API khi xử lý registry



      Code:

      1) Các khóa cơ sở của registry
      • HKEY_CLASSES_ROOT = &H80000000
      • HKEY_CURRENT_CONFIG = &H80000005
      • HKEY_LOCAL_MACHINE = &H80000002
      • HKEY_CURRENT_USER = &H80000001
      • HKEY_USERS = &H80000003





      2) Các kiểu truy xuất registry



      Code:

      • KEY_ALL_ACCESS = &HF003F ‘Mọi kiểu truy xuất
      • KEY_CREATE_LINK = &H20 ‘ Quyền tạo liên kết ký hiệu
      • KEY_CREATE_SUB_KEY = &H4 ‘Quyền tạo khóa con
      • KEY_ENUMERATE_SUB_KEYS = &H8 ‘Quyền liệt kê khóa con
      • KEY_EXECUTE = &H20019 ‘Quyền đọc
      • KEY_NOTIFY = &H10
      • KEY_QUERY_VALUE = &H1
      • KEY_READ = &H20019 ‘Quyền đọc
      • KEY_SET_VALUE = &H2 ‘Quyền đặt giá trị
      • KEY_WRITE = &H20006 ‘Quyền viết dữ liệu





      3) Các kiểu giá trị trong registry



      Code:

      • REG_BINARY = 3 ‘Một chuổi nhị phân
      • REG_DWORD = 4 ‘ Một số nguyên 32 bit
      • REG_DWORD_BIG_ENDIAN = 5 ‘Số nguyên 32 bit
      • REG_DWORD_LITTLE_ENDIAN = 4 ‘Số nguyên 32 bit
      • REG_EXPAND_SZ = 2 ‘Một chuổi kết thúc bởi Null
      • REG_LINK = 6 ‘Liên kết Unicode
      • REG_MULTI_SZ = 7 ‘ Nhiều chuổi kết hợp bởi kt Null
      • REG_NONE = 0 ‘ Không rỏ kiểu
      • REG_SZ=1 ‘ Một chuổi
      • REG_RESOURCE_LIST = 8 ‘ Danh sách tài nguyên





      II. Biến kiểu



      Code:

      1) Kiểu SECURITY_ATTRIBUTES
      Type SECURITY_ATTRIBUTES
      nLength As Long ‘Chiều dài của chuổi bảo mật
      lpSecurityDescriptor As Long ‘ Chuổi bảo mật
      bInheritHandle As Long ‘ hanle
      End Type





      2) Kiểu FILETIME

      Code:



      Type FILETIME
      dwLowDateTime As Long
      dwHighDateTime As Long
      End Type


      III. Các hàm cần dùng khi xử lý Registry
      1) Hàm RegOpenKeyEx
      Khai báo



      Code:

      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





      Hàm có nhiệm vụ mở một khóa trong registry, nếu thành công, hàm sẻ trả
      về giá trị là 0, đồng thời biến phkResult sẻ mang giá trị hanle của khóa
      được mở. Nếu có lỗi xãy ra, có thể là do khóa registry không tồn tại
      hoặc tồn tại nhưng bị cấm truy cập thì hàm trả về mã lỗi khác 0.
      Các tham số
      • hKey
      Chỉ đến khóa chính, là một trong các khóa chính ở mục I (1)
      • lpSubKey
      Là tên khóa cần mở.
      • ulOption
      Không cần thiết, có thể lập thành 0
      • samdesired
      Khai báo kiểu truy cập, là một hoặc kết hợp nhiều giá trị trong các giá trị ở mục I (2)
      • phkResult
      Là biến nhận hanle của khóa registry nếu khóa được mở thành công.
      2) Hàm RegCreateKey
      Khai báo



      Code:

      Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long





      Tương tự hàm RegOpenKeyEx nhưng khác ở chổ nếu khóa chưa tồn tại thì hàm sẻ tạo ra nó.
      Các tham số
      • hKey
      Chỉ đến khóa chính, là một trong các khóa chính ở mục I (1)
      • lpSubKey
      Là tên khóa cần tạo
      • phkResult
      Biến nhận hanle của khóa được tạo hoặc được mở
      3) Hàm RegCreateKeyEx
      Khai báo



      Code:

      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, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long





      Tương tự hàm RegCreateKey nhưng khác chút là có thêm một số thiết lập là
      • Reserved
      Thiết lập là 0
      • lpClass
      Tên lớp hoặc đối tượng của khóa, có thể đặt là chuổi rổng (“”)
      • dwOption
      Là 0 nếu muốn lưu lâu dài trong registry, là 1 nếu chỉ muốn lưu tạm thời, sẻ bị mất khi Window Shutdown.
      • samdesired
      Khai báo kiểu truy cập, là một hoặc kết hợp nhiều giá trị trong các giá trị ở mục I (2)
      • lpSecurityAttributes
      Thiết lập đặc tính bảo mật cho khóa được tạo ra.
      • lpdwDisposition
      Biến nhận kết quả là 1 nếu khóa chưa có và được tạo mới, là 2 nếu khóa đã tồn tại và mở ra.
      4) Hàm RegCloseKey
      Khai báo



      Code:

      Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal hKey As Long) As Long





      Hàm có nhiệm vụ đóng lại khóa sau khi đã được mở bởi hàm trên. Giá trị
      trả về là 0 nếu thành công hoặc là một mã lỗi khác 0 nếu có lỗi xảy ra.
      Tham số hKey là hanle của khóa cần đóng. Tương ứng với tham số phkResult trong hai hàm trên.
      Ví dụ
      a) Mở khóa HKEY_CURRENT_USER\Software\VBClub Soft. Sau đó đóng khóa lại.



      Code:

      Dim retval As Long ‘Nhận giá trị trả về của hàm
      Dim hkey As Long ‘ Nhận Hanle của khóa
      Private Sub Form_Load()
      retval = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\VBClub Soft", 0, KEY_ALL_ACCESS, hkey)
      If retval <> 0 Then
      MsgBox "Khoa chua co !", vbCritical, "Error"
      Else
      MsgBox "Khoa da co va vua duoc mo !", vbInformation, "Infomation"
      End If
      retval = RegCloseKey(hkey)
      End Sub





      b) Mở khóa HKEY_CURRENT_USER\Software\VBClub Soft. Nếu khóa chưa có thì tạo mới. Sau đó đóng khóa lại.



      Code:

      Dim retval As Long ‘nhan giá trị tra ve
      Dim hkey As Long ‘Nhan hanle cua khoa
      Dim keynew As Long ‘ Xem xem khoa da co hay chua
      Dim SA As SECURITY_ATTRIBUTES ‘Khong co y nghia
      Private Sub Form_Load()
      retval = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\VBClub Soft", 0, "", 0, KEY_ALL_ACCESS, SA, hkey, keynew)
      If retval <> 0 Then
      MsgBox "Loi khi tao khoa !", vbCritical, "Error"
      Else
      If keynew = 1 Then
      MsgBox "Khoa da duoc tao moi !", vbInformation, "Infomation"
      Else
      MsgBox "Khoa da ton tai", vbInformation, "Infomation"
      End If
      End If
      retval = RegCloseKey(hkey)
      End Sub




      5) Hàm RegDeleteValue
      Khai báo



      Code:

      Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long





      Hàm xóa chuổi giá trị trong registry. Giá trị trả về sẻ là 0 nếu thành
      công và trả về mã lỗi khác 0 nếu thất bại. Với Windows hiện hành, hàm
      đều thực hiện thành công nếu trong khóa còn có các khóa con. Chú ý là
      trước khi xóa một giá trị trong key thì ta phảI mở Key đó ra trước đã.
      Tham số
      • Hkey
      Là hanle của khóa chưa khóa cần xóa
      • lpValueName
      Tên giá trị bị xóa
      Ví dụ
      Xóa chuổi giá trị “num” trong khóa HKEY_CURRENT_USER\Software\VBClub Soft



      Code:

      Dim retval As Long
      Dim hKey As Long
      Private Sub Form_Load()
      retval = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\VBClub Soft", 0, KEY_ALL_ACCESS, hKey)
      retval = RegDeleteValue(hKey, "num")
      If retval = 0 Then
      MsgBox "Da xoa gia tri thanh cong", vbInformation, "Xoa"
      Else
      MsgBox "Loi khi xoa khoa", vbCritical, "Error"
      End If
      retval = RegCloseKey(hKey)
      End Sub




      6) Hàm RegDeleteKey
      Khai báo
      Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
      Hàm xóa key trong registry. Giá trị trả về sẻ là 0 nếu thành công và trả về mã lỗi khác 0 nếu thất bại.
      Tham số
      • Hkey
      Là một trong các khóa chính ở mục I(1)
      • lpSubKey
      Tên khóa bị xóa
      Ví dụ xóa khóa HKEY_CURRENT_USER\Software\VBClub Soft\me
      Dim retval As Long
      Private Sub Form_Load()
      retval = RegDeleteKey(HKEY_CURRENT_USER, "Software\VBClub Soft\me")
      If retval = 0 Then
      MsgBox "Da xoa gia tri thanh cong", vbInformation, "Xoa"
      Else
      MsgBox "Loi khi xoa khoa", vbCritical, "Error"
      End If
      retval = RegCloseKey(hKey)
      End Sub
      7) Hàm RegEnumKey
      Khai báo



      Code:

      Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long





      Hàm lấy một khóa con của một khóa. Khóa chứa khóa con gọi là khóa cha.
      Nếu thành công, hàm trả về giá trị là 0, nếu có lỗi xảy ra, hàm trả về
      mã lỗi khác 0. Vì cứ mỗi lần gọi nó lại xác định một khóa con nên ta có
      thể liệt kê tất cả khóa con của một khóa cha bằng vòng lặp.
      Các tham số
      • Hkey
      Hanle của khóa cha, phảI được mở trước.
      • dwIndex
      Số thứ tự của khóa con trong số các khóa cha sẻ được lấy ra. Chú ý rẳng
      trong khóa cha có nhiều khóa con thì các khóa con sẻ được sắp xếp theo
      tên từ A đến Z. Và dwIndex hợp lệ phảI có giá trị từ 0 đến số khóa con –
      1.
      • lpName
      Một chuổi để chứa tên của khóa con. Chú ý trước khi dùng nó, bạn phảI khởi tạo cho nó, có thể dùng hàm space()
      • cbname
      Ghi giá trị chính là chiều dài của tên khóa con. Rất quan trọng khi phảI chỉnh lại chiều dài của chuổi lpName.
      Ví dụ: Liệt kê tất cả các khóa con của khóa HKEY_CURRENT_USER\Software
      Thêm một command vào form.



      Code:

      Option Explicit
      Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
      Private 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
      Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
      Private Const HKEY_CURRENT_USER = &H80000001
      Private Const KEY_ALL_ACCESS = &HF003F
      Dim retval As Long
      Dim hKey As Long
      Dim namekey As String ‘Ten khoa con
      Dim lenname As Long ‘ Ghi chieu dai cua khoa con
      Dim index As Long ‘ So thu thu cua khoa con
      Private Sub Command1_Click()
      Me.Cls ‘ Xoa nhung gi trong form
      namekey = Space(255) ‘ Khoi tao bien namekey
      lenname = 255
      index = 0
      retval = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, hKey)
      Do While retval = 0
      retval = RegEnumKey(hKey, index, namekey, lenname)
      If retval = 0 Then Me.Print Left(namekey, lenname) ‘In namekey
      index = index + 1
      Loop
      MsgBox "Khoa co tat ca " & index -1 & " khoa con", vbInformation, "Thong tin"
      retval = RegCloseKey(hKey)
      End Sub




      Cool Hàm RegEnumKeyEx
      Khai báo



      Code:

      Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long




      Tương tự hàm RegEnumKey, nhưng nó có điểm khác là thêm các tham số sau:
      • lpReserved
      Không có ý nghĩa, bạn khai báo ByVal 0
      • lpClass
      Chuổi chứa tên khóa con, tương tự như tham số lpName. Phải khởi tạo trước khi sử dụng.
      • lpcbClass
      Kích thước của lpClass
      • lpftLastWriteTime
      Chứa thời gian ghi, chỉnh sửa khóa cuối cùng.
      9) Hàm RegEnumValue
      Khai báo



      Code:

      Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long




      Hàm đọc một thông tin trong registry . Trong một khóa có nhiều giá trị
      thì các chúng đó được sắp xếp có thứ tự và hàm sẻ lấy giá trị có số thứ
      tự là dwIndex+1. Do vậy ta có thể liệt kê tất cả các giá trị của một
      khóa bằng vòng lặp và hiển nhiên tham số dwIndex có các giá trị phù hợp
      là từ 0 đến số giá trị -1.
      Các tham số
      • hKey
      Là hanle của khóa cần lấy giá trị
      • dwIndex
      là số thứ tự của giá trị cần lấy. Có giá trị phù hợp là 0 đến số giá trị -1.
      • lpValueName
      Nhận tên của giá trị mà hàm trả về.
      • lpcbValueName
      Chiều dài thực sự của giá trị. (Để chỉnh lại độ dài chuổi lpValueName)
      • lpReserved
      Thiết lập thành ByVal 0
      • lpType
      Biến nhận kiểu giá trị trả về, là một trong số các hằng số ở mục I(3)
      • lpData
      Biến nhận dữ liệu, nếu không cần thì thiết lập ByVal 0
      • lpcbData
      Biến nhận kích thước dữ liệu, nếu không cần thì thiết lập ByVal 0
      Ví dụ liệt kê tất cả các giá trị có trong khóa
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr
      entVersion\Uninstall\{91FF042A-6000-11D3-8CFE-0150048383C9}và lấy thông
      tin của nó



      Code:

      Option Explicit
      Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
      Private 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
      Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
      Private Const HKEY_LOCAL_MACHINE = &H80000002
      Private Const HKEY_CURRENT_USER = &H80000001
      Private Const KEY_ALL_ACCESS = &HF003F
      Private Const REG_SZ = 1
      Private Const REG_BINARY = 3 ' Free form binary
      Private Const REG_DWORD = 4 ' 32-bit number
      Private Const REG_EXPAND_SZ = 2 ' Unicode nul terminated string
      Private Const REG_MULTI_SZ = 7 ' Multiple Unicode strings
      Dim retval As Long
      Dim hKey As Long
      Dim NameKey As String
      Dim lpType As Long
      Dim LenName As Long
      Dim Data(0 To 255) As Byte
      Dim DataLen As Long
      Dim DataString As String
      Dim index As Long
      Dim i As Long
      Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
      Me.Cls
      retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{91FF042A-6000-11D3-8CFE-0150048383C9}", 0, KEY_ALL_ACCESS, hKey)
      index = 0
      Do While retval = 0
      NameKey = Space(255)
      DataString = Space(255)
      LenName = 255
      DataLen = 255
      retval = RegEnumValue(hKey, index, NameKey, LenName, ByVal 0, lpType, Data(0), DataLen)
      If retval = 0 Then
      NameKey = Left(NameKey, LenName) ‘Rút bỏ khoản trống thừa
      DataString = ""
      ‘ Xử lý thông tin theo kiểu của nó và đưa vào biến DataString
      Select Case lpType
      Case REG_SZ
      For i = 0 To DataLen - 1
      DataString = DataString & Chr(Data(i)) ‘ Nối các chử cái thành chuổi
      Next
      Case REG_BINARY
      For i = 0 To DataLen - 1
      Dim temp As String
      temp = Hex(Data(i))
      If Len(temp) < 2 Then temp = String(2 - Len(temp), "0") & temp
      DataString = DataString & temp & " "
      ‘ Nối các cặp số nhị phân lại với nhau
      Next
      Case REG_DWORD
      For i = DataLen - 1 To 0 Step -1
      DataString = DataString & Hex(Data(i)) ‘Nối các sô hexa với nhau
      Next
      Case REG_MULTI_SZ
      For i = 0 To DataLen - 1
      DataString = DataString & Chr(Data(i))
      ‘Nối các ký tự bao gồm ký tự vbNullChar (để cách dòng) thành một chuổi, bạn có thể sử dụng một mảng gồm nhiều string thay vì là một
      Next
      Case REG_EXPAND_SZ
      For i = 0 To DataLen - 2
      DataString = DataString & Chr(Data(i))
      ‘Nối các ký tự lại với nhau, bỏ ký tự NULL cuối cùng
      Next
      Case Else
      DataString = " Khong xac dinh duoc !"
      ‘ Trên đây là 5 kiểu có trên WinXP
      End Select
      End If
      Me.Print Left(NameKey, LenName) & " = " & DataString
      index = index + 1
      Loop
      MsgBox "Co tat ca " & index - 1 & " gia tri"
      retval = RegCloseKey(hKey)
      End Sub




      Ghi chú: Tôi lấy khóa trên vì thấy nó có khá nhiều kiểu dữ liệu, bạn
      hãy làm thử với nhiều khóa khác sẻ thu được kết quả tương tự.
      10) Hàm RegQueryValue
      Khai báo
      Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA"
      (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String,
      lpcbValue As Long) As Long
      Hàm đọc dữ liệu của một giá trị trong registry. Hàm trả về 0 nếu thành
      công hoặc là một mã lỗi khác 0 nếu thất bại. Thực tế rất khó vận dụng
      hàm này vì không biết được kiểu dữ liệu của nó để xử lý. Bạn không nên
      quan tâm đến hàm này.
      11) Hàm RegQueryValueEx
      Khai báo



      Code:

      Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.




      Hàm đọc dữ liệu của một giá trị trong registry. Trả về 0 nếu thành công
      và một mã lỗi khác 0 nếu thất bại. Thực tế hàm này không khác mấy so
      với hàm RegEnumValue, trên lý thuyết hàm có khả năng đọc dữ liệu tốt hơn
      hàm RegEnumValue vì biến số nhận dữ liệu lpData có thể là nhiều kiểu
      khác nhau như Byte, Long, String… nên có thể nhận trực tiếp một số kiểu
      giá trị mà không cần phải xử lý. Tuy nhiên trên Windows XP ta chỉ gặp
      phải năm kiểu dữ liệu như trên ví dụ, và việc xử lý cũng không mấy phức
      tạp lắm.
      Các tham số
      Hoàn toàn tương tự như hàm RegEnumValue, chỉ khác ở chổ tham số lpData
      bạn có thể khai báo bằng các kiểu là Integer, Byte, Long, String và một
      kiểu bất kỳ do bạn tự định nghĩa. Lưu ý nếu là khai báo kiểu String thì
      bạn phải đặt từ khóa ByVal ở đầu (bắt buộc).
      12) Hàm RegQueryValueEx
      Khai báo



      Code:

      Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.





      Hàm ghi dữ liệu vào registry, có thể ghi với nhiều kiểu dữ liệu khác
      nhau. Giá trị trả về là 0 nếu thành công hoặc một mã lỗi khác 0 nếu thất
      bại.
      Các tham số
      • hKey
      Hanle của khóa cần ghi dữ liệu.
      • lpValueName
      Tên giá trị cần lưu, nếu đã có thì hàm sẻ ghi đè thông tin vào nó, nếu
      chưa có thì hàm sẻ tạo mới. Đặc biệt nếu bạn muốn lưu thông tin vào giá
      trị Default thì bạn truyền vào một chuổi rổng (“”).
      • Reserved
      Thiết lập là 0.
      • dwType
      Chỉ rỏ kiểu của dữ liệu cần ghi, có thể là một trong các giá trị ở mục
      I(3). Lưu ý hàm sẻ tự động xử lý dữ liệu lpData để ghi vào registry phù
      hợp với kiểu dữ liệu nên trong đa số trường hợp bạn không phải bận tâm
      xử lý dữ liệu như lúc đọc registry.
      • lpData
      Một biến, có thể là một hoặc một mảng các Byte, Integer, Long, String,
      hoặc một kiểu biến tự định nghĩa để đưa thông tin cần lưu. Chú ý nếu đã
      định nghĩa là String thì bắt buộc phải thêm ByVal ở trước.
      • cbData
      Kích thước (tính bằng byte) của dữ liệu đưa vào. Có thể xác định bằng hàm Len().
      Ví dụ



      Code:

      DataString = "My Setting" vbNullChar
      retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Quang Hoa", _ 0, KEY_ALL_ACCESS, hKey)
      retval = RegSetValueEx(hKey, "Setting", 0, REG_SZ, ByVal DataString, _ Len(DataString))
      retval = RegCloseKey(hKey)