2014-02-18 4 views
0

레지스트리 하위 키를 삭제하는 응용 프로그램에서 작업하고 있지만 해당 문제에 대한 해결책을 찾지 못하는 것 같습니다. VB.NET에서이 작업이 더 쉽다는 것을 알고 있습니다. 그러나 나는이 VB6Visual Basic 6에서 레지스트리 하위 키 삭제

내가 시도 무엇

...

DeleteRegKey HKEY_CURRENT_USER\Software\Test을 사용하여 수행하는 방법을 알고 싶어요.

+0

클래스에이 기능을 추가 http://www.amazon.com/Applemans-Visual-Basic-Programmers-Guide/ dp/0672315904 – Jeff

+0

@JeffOnsager 감사합니다. 그러나 지금 당장 구매하는 데 관심이 없습니다. 여기에 대한 해결책을 제공 할 수 있다면 위대 할 것입니다. – user3104111

+0

코드를 게시하고 코드의 어떤 부분에 대한 설명을 게시해야합니다 너는 문제가있다. – jac

답변

0

가치있는 것을 위해 이것을 가져 가십시오. 필자는 Windows 8에서 테스트하지 않았으므로 몇 년 후에 이것을 사용하지 않았으며 Windows 7에 대해서도 전혀 확신하지 못했습니다. 유틸리티 클래스에서이 코드를 가져 와서 모든 선언을 얻었기를 바랍니다.

Private Const KEY_NOTIFY = &H10 
Private Const KEY_QUERY_VALUE = &H1 
Private Const KEY_CREATE_LINK = &H20 
Private Const KEY_CREATE_SUB_KEY = &H4 
Private Const KEY_ENUMERATE_SUB_KEYS = &H8 
Private Const KEY_EVENT = &H1 
Private Const KEY_SET_VALUE = &H2 
Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE)) 
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) 
Private Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE)) 
Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) 

Public Enum RegRootKey 
    HKEY_CLASSES_ROOT = &H80000000 
    HKEY_CURRENT_CONFIG = &H80000005 
    HKEY_CURRENT_USER = &H80000001 
    HKEY_DYN_DATA = &H80000006 
    HKEY_LOCAL_MACHINE = &H80000002 
    HKEY_PERFORMANCE_DATA = &H80000004 
    HKEY_USERS = &H80000003 
End Enum 

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long 
Private 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 
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long 
Private 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 


Public Function DeleteRegKey(ByVal hKeyRoot As RegRootKey, ByVal hKeySubKey As String, ByVal KeyName As String) As Boolean 
    Dim lngRst As Long 
    Dim hKeyReturn As Long 
    Dim hKeyDisposition As Long 
    Dim strSubKeys() As String 
    Dim lngSubKeyCount As Long 
    Dim i As Long 

    On Error GoTo errDeleteRegKey 

    lngRst = RegOpenKeyEx(hKeyRoot, hKeySubKey, ByVal 0&, KEY_READ + KEY_WRITE, hKeyReturn) 

    If lngRst = 0 Then 'we can continue 
     ' first need to find and delete sub keys 
     lngSubKeyCount = EnumSubKeys(hKeyRoot, hKeySubKey & "\" & KeyName, strSubKeys) 
     ' recursively call this function to delete all sub keys 
     For i = 0 To lngSubKeyCount - 1 
     Call DeleteRegKey(hKeyRoot, hKeySubKey & "\" & KeyName, strSubKeys(i)) 
     Next i 
     ' finally down (up?) to the parent key 
     lngRst = RegDeleteKey(hKeyReturn, ByVal KeyName) 
     'close the handle 
     If hKeyReturn <> 0 Then 
     lngRst = RegCloseKey(hKeyReturn) 
     hKeyReturn = 0 
     End If 
    End If 

    If lngRst = 0 Then '0 = success 
     DeleteRegKey = True 
    Else 
     Err.Raise lngRst, App.EXEName, FormatClassError(lngRst) 
    End If 

    Exit Function 

errDeleteRegKey: 
    'close the handle 
    If hKeyReturn <> 0 Then 
     lngRst = RegCloseKey(hKeyReturn) 
     hKeyReturn = 0 
    End If 
    Err.Raise Err.Number, Err.Source & ":DeleteRegKey", Err.Description 

End Function 

이 당신의 책 형태, 모듈, 또는 다음

Call DeleteRegKey(HKEY_CURRENT_USER, "Software", "Test") 
' or 
DeleteRegKey HKEY_CURRENT_USER, "Software", "Test" 
' or 
Dim blnRst as Boolean 
blnRst = DeleteRegKey(HKEY_CURRENT_USER, "Software", "Test") 
+0

답장을 보내 주셔서 감사합니다.하지만 원하는 경우이 작업을 수행하는 방법을 설명 할 수 있습니까? 예를 들어 "HKEY_CURRENT_USER \ Software \ Test"에서 "Test"라는 레지스트리 키를 삭제 하시겠습니까? 감사합니다 – user3104111

+0

@ user3104111 제 편집을 참조하십시오. – jac

관련 문제