我想编写一个程序,检测电脑中是不是装有qq或是foxmail,从注册表中检测有没有他们的安装信息,位置是HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\Foxmail,如果有执行操作a,没安装执行操作b,应该怎么做啊?

解决方案 »

  1.   

    以前看到过一个高手的代码,用的api函数,但是我用着好像不行啊,每一次执行完Rc = RegOpenKeyEx(MainKey, SubKey, 0, KEY_ALL_ACCESS, hKey)后,Rc都不为0:If RegGetStr(HKEY_LOCAL_MACHINE, "Software \ Tencent \ TM", "Install", PathStr) Then
              操作a
        Else
              操作b
        End IfPublic Function RegGetStr(MainKey As Long, SubKey As String, KeyName As String, OutData As String) As Long
        Dim hKey     As Long
        Dim TempStr     As String
        Dim StrLen     As Long
        Dim KeyType     As Long
        Dim Rc     As Long
        
          
        StrLen = 260
        TempStr = String$(StrLen, Chr$(0))
          
        Rc = RegOpenKeyEx(MainKey, SubKey, 0, KEY_ALL_ACCESS, hKey)
          
        If Rc = 0 Then
                Rc = RegQueryValueEx(hKey, KeyName, 0, KeyType, ByVal TempStr, StrLen)
                  
                If KeyType <> REG_SZ Then
                        RegGetStr = -1
                        Exit Function
                          
                End If
                If Rc = 0 Then
                        OutData = Left$(TempStr, StrLen)
                          
                Else
                        RegGetStr = Rc
                          
                End If
                  
                RegCloseKey hKey
                  
        Else
                RegGetStr = Rc
                  
        End If
    End Function
      

  2.   

    我写的程序是在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains下建一个a123项和一个b123项,并分别在它们里面建一个为test的KYE.类型为Dword,值为3 
    希望对你有帮助。 
    '############################################### 
    Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long 
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long 
    Private 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 
    Private Const HKEY_CURRENT_USER = &H80000001 
    Private Const REG_DWORD = 4 ' 32-bit number Private Sub Command1_Click() 
    On Error Resume Next 
    Dim keyHand As Long, r As Long 
    r = RegCreateKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\a123", keyHand) 
    If r = 0 Then 
    '建立成功 
    '设置键值。 
    r = RegSetValueEx(keyHand, "test", 0, REG_DWORD, CLng(3), 4) 
    RegCloseKey keyHand '关闭键 
    End If 
    r = RegCreateKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\b123", keyHand) 
    If r = 0 Then 
    '建立成功 
    '设置键值。 
    r = RegSetValueEx(keyHand, "test", 0, REG_DWORD, CLng(3), 4) 
    RegCloseKey keyHand '关闭键 
    End If 
    End Sub 因为要在项下建key,所以应用用RegSetValueEx函数。
      

  3.   

    模块中:
    '建立新的或者打开一个主键
    Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
    ( _
        ByVal hKey As Long, _
        ByVal lpSubKey As String, _
        ByRef phkResult As Long _
    ) As Long
        
    '打开一个主键
    Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
    ( _
        ByVal hKey As Long, _
        ByVal lpSubKey As String, _
        ByRef phkResult As Long _
    ) As Long
        
    '删除一个主键
    Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
    ( _
        ByVal hKey As Long, _
        ByVal lpSubKey As String _
    ) As Long
        
    '关闭一个主键
    Public Declare Function RegCloseKey Lib "advapi32.dll" _
    ( _
        ByVal hKey As Long _
    ) As Long
        
    '创建或改变一个键值,lpData应由缺省的ByRef型改为ByVal型
    Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
    ( _
        ByVal hKey As Long, _
        ByVal lpValueName As String, _
        ByVal Reserved As Long, _
        ByVal dwType As Long, _
        ByVal lpData As Any, _
        ByVal cbData As Long _
    ) As Long
        
    '查询一个键值,lpData应由缺省的ByRef型改为ByVal型
    Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
    ( _
        ByVal hKey As Long, _
        ByVal lpValueName As String, _
        ByVal lpReserved As Long, _
        ByRef lpType As Long, _
        ByVal lpData As Any, _
        ByRef lpcbData As Long _
    ) As Long
        
    '删除一个键值
    Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" _
    ( _
        ByVal hKey As Long, _
        ByVal lpValueName As String _
    ) As Long'根键常数
    Public Const HKEY_CLASSES_ROOT = -2147483648#
    Public Const HKEY_CURRENT_USER = -2147483647#
    Public Const HKEY_LOCAL_MACHINE = -2147483646#
    Public Const HKEY_USERS = -2147483645#
        
    '键值类型
    Public Const REG_SZ = 1&             '字符串值
    Public Const REG_BINARY = 3&         '二进制值
    Public Const REG_DWORD = 4&          'DWORD值窗体代码:Private Sub Command1_Click()    Dim nKeyHandle As Long, nValueType  As Long, nLength As Long
        Dim sValue As String
            
        '创建一个名为"New Registry Key"主键
        Call RegCreateKey(HKEY_CURRENT_USER, "New Registry Key", nKeyHandle)
        '创建一个字符串“My Value”,值为"I am a winner!"
        sValue = "I am a winner!"
        Call RegSetValueEx(nKeyHandle, "My Value", 0, REG_SZ, sValue, 255)
        '查询创建的这个值
        sValue = Space(255)
        nLength = 255
        Call RegQueryValueEx(nKeyHandle, "My Value", 0, nValueType, sValue, nLength)
        MsgBox sValue
        Call RegDeleteValue(nKeyHandle, "My Value")
        Call RegDeleteKey(HKEY_CURRENT_USER, "New Registry Key")
        Call RegCloseKey(nKeyHandle)
        
    End Sub
      

  4.   

    谢谢大家了,我查了半天,发现发了一个弱智的错误,KEY_ALL_ACCESS这个常量忘了定义了
      

  5.   

    以下VB自带的函数可以快速读写书册表`GetSettingSaveSetting