Key và Sub key khác nhau chổ nào

Liên hệ QC

nguoikemcoi

Thành viên mới
Tham gia
24/11/07
Bài viết
17
Được thích
0
Chào anh chị.
Em có tham khảo trên trang: http://www.vb-helper.com có code delete key và lấy thông tin của 1 key trong registry.
Xin hỏi anh chi Key và Subkey khác chổ nào.
biến Section trong sub DeleteKey có phải được hiểu như sau không:
  1. 1) HKEY_CLASSES_ROOT Thông tin hệ điều hành
  2. 2) HKEY_CURRENT_CONFIG Thông tin cấu hình hiện tại của máy tính
  3. 3) HKEY_LOCAL_MACHINE Thông tin các chương trình cho mọi người dùng
  4. 4) HKEY_CURRENT_USER Thông tin các chương trình cho người dùng hiện tại
  5. 5) HKEY_USERS Thông tin cho tất cả người dùng
Mã:
Private Sub DeleteKey(ByVal section As Long, ByVal key_name _
    As String)
Dim pos As Integer
Dim parent_key_name As String
Dim parent_hKey As Long


    If Right$(key_name, 1) = "\" Then key_name = _
        Left$(key_name, Len(key_name) - 1)


    ' Delete the key's subkeys.
    DeleteSubkeys section, key_name


    ' Get the parent's name.
    pos = InStrRev(key_name, "\")
    If pos = 0 Then
        ' This is a top-level key.
        ' Delete it from the section.
        RegDeleteKey section, key_name
    Else
        ' This is not a top-level key.
        ' Find the parent key.
        parent_key_name = Left$(key_name, pos - 1)
        key_name = Mid$(key_name, pos + 1)


        ' Open the parent key.
        If RegOpenKeyEx(section, _
            parent_key_name, _
            0&, KEY_ALL_ACCESS, parent_hKey) <> _
                ERROR_SUCCESS _
        Then
            MsgBox "Error opening parent key"
        Else
            ' Delete the key from its parent.
            RegDeleteKey parent_hKey, key_name


            ' Close the parent key.
            RegCloseKey parent_hKey
        End If
    End If
End Sub


' Delete all the key's subkeys.
Private Sub DeleteSubkeys(ByVal section As Long, ByVal _
    key_name As String)
Dim hKey As Long
Dim subkeys As Collection
Dim subkey_num As Long
Dim length As Long
Dim subkey_name As String


    ' Open the key.
    If RegOpenKeyEx(section, key_name, _
        0&, KEY_ALL_ACCESS, hKey) <> ERROR_SUCCESS _
    Then
        MsgBox "Error opening key '" & key_name & "'"
        Exit Sub
    End If


    ' Enumerate the subkeys.
    Set subkeys = New Collection
    subkey_num = 0
    Do
        ' Enumerate subkeys until we get an error.
        length = 256
        subkey_name = Space$(length)
        If RegEnumKey(hKey, subkey_num, _
            subkey_name, length) _
                <> ERROR_SUCCESS Then Exit Do
        subkey_num = subkey_num + 1


        subkey_name = Left$(subkey_name, InStr(subkey_name, _
            Chr$(0)) - 1)
        subkeys.Add subkey_name
    Loop
    
    ' Recursively delete the subkeys and their subkeys.
    For subkey_num = 1 To subkeys.Count
        ' Delete the subkey's subkeys.
        DeleteSubkeys section, key_name & "\" & _
            subkeys(subkey_num)


        ' Delete the subkey.
        RegDeleteKey hKey, subkeys(subkey_num)
    Next subkey_num


    ' Close the key.
    RegCloseKey hKey
End Sub
 ' Get the key information for this key and
' its subkeys.
Private Function GetKeyInfo(ByVal section As Long, ByVal _
    key_name As String, ByVal indent As Integer) As String
Dim subkeys As Collection
Dim subkey_values As Collection
Dim subkey_num As Integer
Dim subkey_name As String
Dim subkey_value As String
Dim length As Long
Dim hKey As Long
Dim txt As String
Dim subkey_txt As String


    Set subkeys = New Collection
    Set subkey_values = New Collection


    If Right$(key_name, 1) = "\" Then key_name = _
        Left$(key_name, Len(key_name) - 1)


    ' Open the key.
    If RegOpenKeyEx(section, _
        key_name, _
        0&, KEY_ALL_ACCESS, hKey) <> ERROR_SUCCESS _
    Then
        MsgBox "Error opening key."
        Exit Function
    End If


    ' Enumerate the subkeys.
    subkey_num = 0
    Do
        ' Enumerate subkeys until we get an error.
        length = 256
        subkey_name = Space$(length)
        If RegEnumKey(hKey, subkey_num, _
            subkey_name, length) _
                <> ERROR_SUCCESS Then Exit Do
        subkey_num = subkey_num + 1
        
        subkey_name = Left$(subkey_name, InStr(subkey_name, _
            Chr$(0)) - 1)
        subkeys.Add subkey_name
    
        ' Get the subkey's value.
        length = 256
        subkey_value = Space$(length)
        If RegQueryValue(hKey, subkey_name, _
            subkey_value, length) _
            <> ERROR_SUCCESS _
        Then
            subkey_values.Add "Error"
        Else
            ' Remove the trailing null character.
            subkey_value = Left$(subkey_value, length - 1)
            subkey_values.Add subkey_value
        End If
    Loop
    
    ' Close the key.
    If RegCloseKey(hKey) <> ERROR_SUCCESS Then
        MsgBox "Error closing key."
    End If


    ' Recursively get information on the keys.
    For subkey_num = 1 To subkeys.Count
        subkey_txt = GetKeyInfo(section, key_name & "\" & _
            subkeys(subkey_num), indent + 2)
        txt = txt & Space(indent) & _
            subkeys(subkey_num) & _
            ": " & subkey_values(subkey_num) & vbCrLf & _
            subkey_txt
    Next subkey_num


    GetKeyInfo = txt
End Function

Mong hồi đáp/
Cảm ơn.
 
Code dài dòng quá
Để xóa 1 key trong Registry, tôi làm vầy:
PHP:
Function DelRegkey(ByVal sKey As String)
  CreateObject("WScript.Shell").Run "cmd /c reg delete """ & sKey & """ /f", 0, True
End Function
Ví dụ:
- Ta có 1 key
Mã:
[B]HKEY_CURRENT_USER\Software\Microsoft\Office\TestKey[/B]
- Để xóa TestKey, ta dùng đoạn code:
PHP:
Sub Test()
  Dim sKey As String
  sKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\TestKey"
  DelRegkey sKey
End Sub
Xong! Gọn không?
---------------------
Lưu ý: Thao tác chỉnh sửa Registry không phải chuyện giỡn chơi, chỉ dành cho người thật am hiểu về hệ thống (không phải rành VB là được) ---> Vọc bậy bạ có thể làm cho máy tính die luôn
 
Upvote 0
Code dài dòng quá
Để xóa 1 key trong Registry, tôi làm vầy:
PHP:
Function DelRegkey(ByVal sKey As String)
  CreateObject("WScript.Shell").Run "cmd /c reg delete """ & sKey & """ /f", 0, True
End Function
Ví dụ:
- Ta có 1 key
Mã:
[B]HKEY_CURRENT_USER\Software\Microsoft\Office\TestKey[/B]
- Để xóa TestKey, ta dùng đoạn code:
PHP:
Sub Test()
  Dim sKey As String
  sKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\TestKey"
  DelRegkey sKey
End Sub
Xong! Gọn không?
---------------------
Lưu ý: Thao tác chỉnh sửa Registry không phải chuyện giỡn chơi, chỉ dành cho người thật am hiểu về hệ thống (không phải rành VB là được) ---> Vọc bậy bạ có thể làm cho máy tính die luôn
Cảm ơn anh.
Cho em thắc mắc thêm một vấn đề nữa.
Ví dụ:
Có 1 Key: HKEY_CURRENT_USER\Software\Microsoft\Office\Vidu1
Trong key trên có 1 string value là: "teststring"
vậy để xóa string value: "teststring" trong key trên thì viết code như thế nào!.

Cảm ơn anh.
Mong nhận được hồi âm.
 
Upvote 0
Cảm ơn anh.
Cho em thắc mắc thêm một vấn đề nữa.
Ví dụ:
Có 1 Key: HKEY_CURRENT_USER\Software\Microsoft\Office\Vidu1
Trong key trên có 1 string value là: "teststring"
vậy để xóa string value: "teststring" trong key trên thì viết code như thế nào!.

Cảm ơn anh.
Mong nhận được hồi âm.
Xóa value trong key ta dùng hàm khác:
PHP:
Function DelRegValue(ByVal sKey As String, ByVal ValName As String)
  CreateObject("WScript.Shell").Run "cmd /c reg delete """ & sKey & """ /v """ & ValName & """ /f", 0, True
End Function
Trong đó:
- sKey là đường dẫn của key
- ValName là tên value cần xóa trong sKey
Ví dụ: Để xóa teststring trong key HKEY_CURRENT_USER\Software\Microsoft\Office\Vidu1 ta thêm code này:
PHP:
Sub Test()
  Dim sKey As String, ValName As String
  sKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\Vidu1"
  ValName = "teststring"
  DelRegValue sKey, ValName
End Sub
 
Upvote 0
Web KT
Back
Top Bottom