Đă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

Share
    Hoạt Động Tốt
    avatar

    Giới tính : Nữ

    Tuổi : 26

    Đến từ : HCM-bt

    Ngày Tham gia : 15/07/2011

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

    #1

     on 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






    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)