以前看到过一个高手的代码,用的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
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
我写的程序是在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函数。
模块中: '建立新的或者打开一个主键 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)
操作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
希望对你有帮助。
'###############################################
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函数。
'建立新的或者打开一个主键
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