代码如下:
Const ERROR_NO_MORE_ITEMS = 259&
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) 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 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 String, lpcbData As Long) As LongPrivate Sub Form_Load()
Dim hKey As Long, Cnt As Long, sName As String, sData As String, Ret As Long, RetData As Long
    Const BUFFER_SIZE As Long = 255
    Me.AutoRedraw = True
    Me.Visible = False
        Cnt = 0
    'If RegOpenKey(HKEY_CURRENT_USER, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", hKey) = 0 Then
    If RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\360SD", hKey) = 0 Then
        sName = Space(BUFFER_SIZE)
        sData = Space(BUFFER_SIZE)
        Ret = BUFFER_SIZE
        RetData = BUFFER_SIZE
        While RegEnumValue(hKey, Cnt, sName, Ret, 0, ByVal 0&, ByVal sData, RetData) <> ERROR_NO_MORE_ITEMS
                                '//输出 启动项 = 值
            If RetData > 0 Then Debug.Print Left$(sName, Ret) & "=" & Left$(sData, RetData - 1)
                Cnt = Cnt + 1
                sName = Space(BUFFER_SIZE)
                sData = Space(BUFFER_SIZE)
                Ret = BUFFER_SIZE
                RetData = BUFFER_SIZE
        Wend
                RegCloseKey hKey
    End If
    Unload Me
End Sub

解决方案 »

  1.   

    大哥,能说下,下那一个能解决这个问题吗?
    http://www.microsoft.com/downloads/en/results.aspx?freetext=vb6+sp6&displaylang=en&stype=s_basic
      

  2.   

    查找注册表,中文为什么会显示乱码呢?
    如下:
    DisplayName=360杀毒 襨
    UninstallString=d:\360\360sd\uninst.exe
    DisplayIcon=d:\360\360sd\360sd.exe
    DisplayVersion=1.0.0.1073
    URLInfoAbout=http://www.360.cn
    Publisher=360安全中心 胈  
    ${PRODUCT_STARTMENU_REGVAL}=360杀毒 襨
      

  3.   

    楼主的代码,我刚才试了一下读取中文。
    没有问题啊。不知道是不是系统内码页(区域设置)的原因。
      只是‘提取’文本内容应该更改一下:RegEnumValue() 的返回参数是“字节数”,而 VB 中无B后缀的字符串函数是按“字符数”来处理的,如果内容含有中文,按  RetData 来 Left$() 是不正确的。要象这样:
    Left$(sName, Ret) & "=" & Left$(sData, InStr(1, sData, vbNullChar) - 1)同样,如果 sName 中有中文,也不能直接按 Ret 的值来处理。