vb使用Getsetting、Savesetting和Delsetting等内部函数操作注册表,并且可以在程序的任何地方使用绝对不会出现重新启动的问题。但其只能在特定的位置进行操作,如需进行复杂操作需要调用API,不修改机器硬件配置的话就不需要重起计算机。

解决方案 »

  1.   

    Option Explicit'registry Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As LongPublic Enum hKeyConstants
        HKEY_CLASSES_ROOT = &H80000000
        HKEY_CURRENT_USER = &H80000001
        HKEY_LOCAL_MACHINE = &H80000002
        HKEY_USERS = &H80000003
        HKEY_PERFORMANCE_DATA = &H80000004
        HKEY_CURRENT_CONFIG = &H80000005
        HKEY_DYN_DATA = &H80000006
    End Enum' DWORD型 TYPE
    Public Enum RegTypeConstants
    '    REG_NONE = (0)                         '
        REG_SZ = (1)                           ' string
    '    REG_EXPAND_SZ = (2)                    
    '    REG_BINARY = (3)                       'BINARY
        REG_DWORD = (4)                        ' 32bit
        REG_DWORD_LITTLE_ENDIAN = (4)          ' 
    '    REG_DWORD_BIG_ENDIAN = (5)             '
    '    REG_LINK = (6)                         ' Unicode
    '    REG_MULTI_SZ = (7)                     ' 
    '    REG_RESOURCE_LIST = (8)                '
    End Enum
    Private Const ERROR_SUCCESS     As Long = 0Private Declare Function SHSetValue Lib "SHLWAPI.DLL" Alias "SHSetValueA" (ByVal hKey As Long, ByVal pszSubKey As String, ByVal pszValue As String, ByVal dwType As Long, pvData As Any, ByVal cbData As Long) As Long
    Private Declare Function SHEnumKeyEx Lib "SHLWAPI.DLL" Alias "SHEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal pszName As String, pcchName As Long) As Long
    Private Declare Function SHGetValue Lib "SHLWAPI.DLL" Alias "SHGetValueA" (ByVal hKey As Long, ByVal pszSubKey As String, ByVal pszValue As String, pdwType As Long, pvData As Any, pcbData As Long) As LongPrivate 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 RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongPrivate Const KEY_QUERY_VALUE = &H1
    Private Const KEY_ENUMERATE_SUB_KEYS = &H8
    Private Const KEY_NOTIFY = &H10
    Private Const KEY_CREATE_SUB_KEY = &H4
    Private Const KEY_CREATE_LINK = &H20
    Private Const KEY_SET_VALUE = &H2
    Private Const STANDARD_RIGHTS_ALL = &H1F0000
    Private Const SYNCHRONIZE = &H100000
    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))Public Function RegSetValue(hInKey As hKeyConstants, ByVal SubKey As String, ByVal ValName As String, RegType As RegTypeConstants, ByVal Value As Variant) As Boolean
        ' InKey   : key
        ' SubKey  : SubKey 
        ' ValName : Name
        ' RegType : datetype
        ' Value   : Values
        ' Return  : True, False
        Dim lnghSubKey          As Long
        Dim lngValue            As Long
        Dim strValue            As String
        Dim lngResult           As Long
        'default values
        RegSetValue = False
        Select Case RegType
            Case REG_DWORD, REG_DWORD_LITTLE_ENDIAN
                ' set values
                lngValue = CLng(Value)
                lngResult = SHSetValue(hInKey, _
                                       SubKey, _
                                       ValName, _
                                       REG_DWORD, _
                                       lngValue, _
                                       Len(lngValue))
                RegSetValue = (lngResult = ERROR_SUCCESS)
            Case REG_SZ
                ' Buf
                strValue = CStr(Value)
                '
                lngResult = SHSetValue(hInKey, _
                                       SubKey, _
                                       ValName, _
                                       REG_SZ, _
                                       ByVal strValue, _
                                       CLng(LenB(StrConv(strValue, vbFromUnicode)) + 1))
                RegSetValue = (lngResult = ERROR_SUCCESS)
        End Select
    End FunctionPublic Function RegGetValue(hInKey As hKeyConstants, ByVal SubKey As String, ByVal ValName As String, RegType As RegTypeConstants, ByVal Default As Variant) As Variant
        Dim varRetVal As Variant
        Dim lnghSubKey As Long
        Dim lngBuffer As Long
        Dim strBuffer As String
        Dim lngResult As Long    varRetVal = Default    Select Case RegType
        Case REG_DWORD, REG_DWORD_LITTLE_ENDIAN
            lngResult = SHGetValue(hInKey, SubKey, ValName, REG_DWORD, lngBuffer, Len(lngBuffer))
            If lngResult = ERROR_SUCCESS Then
                varRetVal = lngBuffer
            End If    Case REG_SZ
            strBuffer = String(256, vbNullChar)
            lngResult = SHGetValue(hInKey, SubKey, ValName, REG_SZ, ByVal strBuffer, Len(strBuffer))
            If lngResult = ERROR_SUCCESS Then
                varRetVal = Left$(strBuffer, InStr(strBuffer, vbNullChar) - 1)
            End If    End Select    RegGetValue = varRetVal
    End FunctionPublic Function EnumKeys(hInKey As hKeyConstants, ByVal SubKey As String, Keys() As String) As Long
        Dim lngResult As Long
        Dim hSubKey As Long
        Dim lngKeyCount As Long
        Dim strName As String    If SubKey = vbNullString Then
            hSubKey = hInKey
        Else
            If RegOpenKeyEx(hInKey, SubKey, 0, KEY_ALL_ACCESS, hSubKey) <> ERROR_SUCCESS Then
                Exit Function
            End If
        End If
        
        Do
            strName = String(256, vbNullChar)
            
            lngResult = SHEnumKeyEx(hSubKey, lngKeyCount, strName, Len(strName))
            
            If lngResult = ERROR_SUCCESS Then
                ReDim Preserve Keys(lngKeyCount) As String
                
                Keys(lngKeyCount) = Left$(strName, InStr(strName, vbNullChar) - 1)
                lngKeyCount = lngKeyCount + 1
            Else
                Exit Do
            End If
        Loop
        
        RegCloseKey hSubKey
        
        EnumKeys = lngKeyCount
    End Function用以上的代码生成一个类Class,例如:Class Registry什么的,用的时候
    new Registry从别的地方抄的,自己琢磨一下吧?
      

  2.   

    可以用api regcreatkey........等修改好,然后光闭expolor 进程,再open 一个线程给expolor
      

  3.   

    用api
    findwindow 
    postquitmessage  to kill explore
    接着是 shell explore.exe
    loop wait for the new explore to appear