请问怎么样才能实现对注册表的操作呢:检查注册表中一个键值,如果存在就读取它,如果不存在就创建它,然后给它一下初始值,谢谢各位老大,谢谢!谢谢!谢谢!谢谢!谢谢!

解决方案 »

  1.   

    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003
    Public Const HKEY_PERFORMANCE_DATA = &H80000004
    Public Const ERROR_SUCCESS = 0&Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
    Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
    Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    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
    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 LongPrivate 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 Any) 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 Any, lpcbData As Long) As LongPublic Const REG_SZ = 1                         ' Unicode nul terminated string
    Public Const REG_DWORD = 4                      ' 32-bit numberPublic Function GetString(hKey As Long, strPath As String, strValue As String)
      
      Dim keyhand As Long
      Dim datatype As Long
      Dim lResult As Long
      Dim strBuf As String
      Dim lDataBufSize As Long
      Dim intZeroPos As Integer
      r = RegOpenKey(hKey, strPath, keyhand)
      lResult = RegQueryValueEx(keyhand, strValue, 0&, lValueType, ByVal 0&, lDataBufSize)
      If lValueType = REG_SZ Then
        strBuf = String(lDataBufSize, " ")
        lResult = RegQueryValueEx(keyhand, strValue, 0&, 0&, ByVal strBuf, lDataBufSize)
        If lResult = ERROR_SUCCESS Then
            intZeroPos = InStr(strBuf, Chr$(0))
            If intZeroPos > 0 Then
                GetString = Left$(strBuf, intZeroPos - 1)
            Else
                GetString = strBuf
            End If
        End If
      End IfEnd FunctionPublic Sub SaveString(hKey As Long, strPath As String, strValue As String, strdata As String)
      
      Dim keyhand As Long
      Dim r As Long
      r = RegCreateKey(hKey, strPath, keyhand)
      r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata))
      r = RegCloseKey(keyhand)End SubPublic Function DelString(ByVal hKey As Long, ByVal strPath As String, ByVal strValue As String)
      
      Dim keyhand As Long
      Dim r As Long
      r = RegOpenKey(hKey, strPath, keyhand)
      r = RegDeleteValue(keyhand, strValue)
      r = RegCloseKey(keyhand)End FunctionPublic Function DelKeys(ByVal hKey As Long, ByVal strPath As String) ', ByVal strKeys As String)  Dim r As Long
      r = RegDeleteKey(hKey, strPath)End FunctionPublic Function CreateKeys(ByVal hKey As Long, ByVal strPath As String)  Dim keyhand As Long
      Dim r As Long
      r = RegCreateKey(hKey, strPath, keyhand)
      r = RegCloseKey(keyhand)End Function
    Public Function ListSubkey(ByVal hKey As Long, ByVal strPath As String) As String  Dim keyhand As Long
      Dim r As Long
      Dim strlistsubkey As String
      
      Dim sName As String, sData As String, Ret As Long, RetData As Long
      Dim indexs As Long
      
      Const ERROR_NO_MORE_ITEMS = 259&
      Const BUFFER_SIZE As Long = 255
      Ret = BUFFER_SIZE
      sName = Space(BUFFER_SIZE)
      
      r = RegOpenKey(hKey, strPath, keyhand)
      While RegEnumKeyEx(keyhand, indexs, sName, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
        If strlistsubkey = "" Then
            strlistsubkey = Left$(sName, Ret)
        Else
            strlistsubkey = strlistsubkey + "_" + Left$(sName, Ret)
        End If
        indexs = indexs + 1
      Wend
      ListSubkey = strlistsubkey
    End Function
      

  2.   


      
    1銆丷egOpenKey锛氭墦寮€SubKey
       RegCreateKey锛氬缓绔婼ubKey
       RegCloseKey锛氬叧闂墦寮€SubKey2銆佸瓨鍙朧alue锛歊egQueryValue锛氳鍙栨煇Key鐨勯粯璁ゅ€?
        RegQueryValueEx锛氳鍙栨煇Key鐨勭壒瀹氬悕绉板€?
        RegEnumValue锛氬垪涓炬煇Key鎵€鏈夊悕绉板€?
        RegDeleteValue銆侊細鍒犻櫎鏌怟ey鐨勬煇涓€鍚嶇О
        RegsetValue锛氳缃煇Key鐨勯粯璁ゅ€?
        RegsetValueEx锛氳缃煇Key鐨勭壒瀹氬悕绉板€?3銆佸瓨鍙朘ey锛? RegEnumKey锛氶€愪竴鍒椾妇SubKey
        RegQueryinfoKey锛氭煡璇ey鐨勬秷鎭?
        RegDeleteKey锛氬垹闄ey鎴朣ubKey
      

  3.   

    http://expert.csdn.net/Expert/topic/2053/2053169.xml?temp=.6511347
    http://expert.csdn.net/Expert/topic/2065/2065481.xml?temp=.4905512
    http://expert.csdn.net/Expert/topic/2064/2064300.xml?temp=.1328852
    VB操作注册表
    http://www.sqreg.com/list.asp?id=243
    http://www.sqreg.com/list.asp?id=244
    http://www.sqreg.com/list.asp?id=245
    http://www.sqreg.com/list.asp?id=246
    http://www.sqreg.com/list.asp?id=247
    http://www.sqreg.com/list.asp?id=248
    http://www.sqreg.com/list.asp?id=249
    http://www.sqreg.com/list.asp?id=250
    http://www.sqreg.com/list.asp?id=251
      

  4.   

    http://expert.csdn.net/Expert/topic/2064/2064300.xml?temp=.5751154注册表写入,应该为
    If Result=0 Then
    注册表读取:
    Public Function ReadReg(UserName As String, ListName As String) As Boolean
      Dim Result As Long
      Dim SubKey As String
      Dim Reg_phkey As Long
      ReadReg = False
      SubKey = "Software\WellDrawData"
      UserName = String(20, Chr(0))
      listName = String(20, Chr(0))
      Result = RegOpenKeyEx(HKEY_CURRENT_USER, SubKey, 0, KEY_READ, Reg_phkey)
      If Result = ERROR_SUCCESS Then
            RegQueryValueExString Reg_phkey, "用户名", 0&, REG_SZ, UserName, LenB(UserName)
            RegQueryValueExString Reg_phkey, "序列号", 0&, REG_SZ, ListName, LenB(ListName)
            RegCloseKey (Reg_phkey)
      End If
      UserName = Left(UserName, LenB(UserName) - 1)
      listName = Left(listName, LenB(listName) - 1)
      If Trim(UserName) = "hgy" And Trim(ListName) = "0123456789" Then
              ReadReg = True
      End If
    End FunctionVB中如何实现注册表的读写 
     
    ---- “API”中专门提供了处理注册表的函数,不用说也知道,它们肯定功能强大(因为它们是API),但是它们的难度也是不小的。如果你是一个入门者的话,这大概会令你头痛一阵子。不过VB本身还提供了几个函数,专门用来处理注册表,相对来说它们就简单多了,所以我只对它们做一下说明: SaveSetting appname, section, key, value
    ---- 这句话的作用是将应用程序的信息存入注册表中。其中四个参数都是必要的,其含义分别为:应用程序名,区段,键,值。比如我们要为我们的程序(名为“测试”)的主窗体的位置进行存储,就可以写成: SaveSetting “测试”,”main”,”
        top”,frmMain.Top
    SaveSetting “测试”,”main”,”
        Left”,frmMain.Left
    SaveSetting “测试”,”main”,”
        Width”,frmMain.Width
    SaveSetting “测试”,”main”,”
        Height”,frmMain.Height
    ---- 这样,就把当前的主窗体的位置进行了记录,在下次打开这个窗体的时候,我们就可以在把这些值取出来。那么如何才能把我们所存储的值取出来呢?这就要用到另一个函数:GetSetting,它的语法是: GetSetting(appname, section, key[, default])
    ---- 该函数的各部分的意义均和上面的函数的意义相同,所不同的是多了一个default而少了一个value。这个函数最后返回的结果即value值,而default指的是如果所指定的键不存在时,则以default指定的值为返回结果。如果没指定default,则default的默认值是””,即0长度的字符串。接上例,在程序刚开始的时候,我们应该取出上一次所存储的主窗体的位置,可以写成: frmMain.Top = GetSetting
        (“测试”,”main”,”top”)
    frmMain.Left = GetSetting
        (“测试”,”main”,”Left”)
    frmMain.Height = GetSetting
       (“测试”,”main”,”Height”)
    frmMain.Width = GetSetting
        (“测试”,”main”,”Width”)
    ---- 好了,到此为止,可以暂且告一段落,让我们打开注册表,看一看我们把信息是记录在什么地方了。按照下面的路径打开: HKEY_CURRENT_USER\Software\VB And VBA Program Settings 你会看到你的“测试”就在里边放着。 ---- 当你的应用程序最终被卸载时,你应该考虑(而且你应该这样做)把你写入注册表中的内容清除掉,因为离开了你的应用程序,它们无疑就是一推垃圾而已。要想将它们删掉,我们可以用函数:DeleteSetting,它的语法如下:DeleteSetting appname, [section[, key]] 在几个参数中,只有appname是必须地,其它两项均可选。比如我们要删除窗体的“高”这键,则可以写成:DeleteSetting “测试”,”main”,”Height”如果我们要将”main”这个段整个去掉,则可以写成DeleteSetting “测试”,”main” 如果我们再彻底一些,想将整个应用程序去掉的话,就干脆直接写成: DeleteSetting  “测试”
    ---- 这种方法的不足之处是只能把信息记录在指定的位置,即 HKEY_CURRENT_USER\Software\VB
        And VBA Program Settings
    ---- 如果要写入到别的地方,就要借助于API了。