Private Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long Private Const ERROR_MORE_DATA = 234 ' dderror Private Sub Command1_Click() Dim S As String, ret As Boolean ret = GetDefaultValue(HKEY_CLASSES_ROOT, ".txt", S) MsgBox S End Sub Private Function GetDefaultValue(ByVal hKey As Long, ByVal Subkey As String, Value As String) As Boolean Dim ret As Long, lenS As Long, S As String ret = RegQueryValue(hKey, Subkey, "", lenS) If ret <> 0 And ret <> ERROR_MORE_DATA Then GetDefaultValue = False Exit Function End If S = String(lenS, Chr(0)) ret = RegQueryValue(hKey, Subkey, S, lenS) If ret <> 0 Then GetDefaultValue = False Exit Function End If Value = Left(S, lenS - 1) GetDefaultValue = True End Function
i'am sorry ,楼上的,S返回的是空值
最前面少了Const HKEY_CLASSES_ROOT = &H80000000,剪切时掉了.加上就行了,返回"txtFile" 那是查询默认值的,下面的是查询指定值的Private Sub Command2_Click() Dim hKey As Long, ret As Long, lenData As Long, typeData As Long Dim Name As String Dim s As String '读取HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run的internat.exe的value. Name = "ravtask" ret = RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", hKey) If ret = 0 Then ret = RegQueryValueEx(hKey, Name, 0, typeData, ByVal vbNullString, lenData) End If s = String(lenData, Chr(0)) ret = RegQueryValueEx(hKey, Name, 0, typeData, ByVal s, lenData) s = Left(s, InStr(s, Chr(0)) - 1) MsgBox s End Sub'若Run下没有RavTask改成你机子有的,否则又是空串! '以下代码加在模块里 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 HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Public Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long Public Const ERROR_MORE_DATA = 234 ' dderror Public Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long Enum ValueType REG_NONE = 0 REG_SZ = 1 REG_EXPAND_SZ = 2 REG_BINARY = 3 REG_DWORD = 4 REG_DWORD_BIG_ENDIAN = 5 REG_MULTI_SZ = 7 End Enum Public 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Private Const ERROR_MORE_DATA = 234 ' dderror
Private Sub Command1_Click()
Dim S As String, ret As Boolean
ret = GetDefaultValue(HKEY_CLASSES_ROOT, ".txt", S)
MsgBox S
End Sub
Private Function GetDefaultValue(ByVal hKey As Long, ByVal Subkey As String, Value As String) As Boolean
Dim ret As Long, lenS As Long, S As String
ret = RegQueryValue(hKey, Subkey, "", lenS)
If ret <> 0 And ret <> ERROR_MORE_DATA Then
GetDefaultValue = False
Exit Function
End If
S = String(lenS, Chr(0))
ret = RegQueryValue(hKey, Subkey, S, lenS)
If ret <> 0 Then
GetDefaultValue = False
Exit Function
End If
Value = Left(S, lenS - 1)
GetDefaultValue = True
End Function
那是查询默认值的,下面的是查询指定值的Private Sub Command2_Click()
Dim hKey As Long, ret As Long, lenData As Long, typeData As Long
Dim Name As String
Dim s As String
'读取HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run的internat.exe的value.
Name = "ravtask"
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", hKey)
If ret = 0 Then
ret = RegQueryValueEx(hKey, Name, 0, typeData, ByVal vbNullString, lenData)
End If
s = String(lenData, Chr(0))
ret = RegQueryValueEx(hKey, Name, 0, typeData, ByVal s, lenData)
s = Left(s, InStr(s, Chr(0)) - 1)
MsgBox s
End Sub'若Run下没有RavTask改成你机子有的,否则又是空串!
'以下代码加在模块里
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 HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
Public Const ERROR_MORE_DATA = 234 ' dderror
Public Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Enum ValueType
REG_NONE = 0
REG_SZ = 1
REG_EXPAND_SZ = 2
REG_BINARY = 3
REG_DWORD = 4
REG_DWORD_BIG_ENDIAN = 5
REG_MULTI_SZ = 7
End Enum
Public 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
辛苦您了。