MSGBOX语句是特意写入的,目的是为了监视对注册表写入的返回值,就是通过这两个对话框看到注册表的写入错误的。
翻看工具书和思考后,经过修改的程序如下,但还是提示错误,有没有高手指点一下啊……
'定义程序调用的常数
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_CREATE_LINK = &H20
Private Const SYNCHRONIZE = &H100000
Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const REG_OPTION_NON_VOLATILE = 0 ' Key is preserved when system is rebooted
Private Const REG_OPTION_VOLATILE = 1 ' Key is not preserved when system is rebooted
Private Const REG_SZ = 1 ' Unicode nul terminated string
Private Const ERROR_SUCCESS = 0&
'定义程序使用的全局变量
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
'对函数进行声明
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
'子函数定义(功能函数)
Private Sub CreateNewKey(LPredefinedKey As Long, sNewKeyName As String, aaa As String)
Dim hnewkey As Long
Dim lRetVal As Long
Dim nSize As Long
Dim Sa As SECURITY_ATTRIBUTES
'建立htsuna键
lRetVal = RegCreateKeyEx(LPredefinedKey, sNewKeyName, 0, "", REG_OPTION_VOLATILE, KEY_ALL_ACCESS, Sa, hnewkey, nSize)
'提示注册表调用返回值,若是错误代码并显示错误信息
MsgBox lRetVal & ":" & Error(lRetVal)
'设置该键键值为123
lRetVal = RegSetValueEx(LPredefinedKey, sNewKeyName, 0, REG_SZ, aaa, CLng(Len(aaa)))
'提示注册表调用返回值,若是错误代码并显示错误信息
MsgBox lRetVal & ":" & Error(lRetVal)
'若设置成功,提示OK
If lRetVal = ERROR_SUCCESS Then
MsgBox "OK"
End If
'关闭对注册表的调用
RegCloseKey (hnewkey)
End Sub
'主程序,点击command1按钮则执行子程序CreateNEWkey
Private Sub Command1_Click()
'在HKEY_LOCAL_MACHINE根键下建立htsuna键,并将键值设置为123
CreateNewKey HKEY_LOCAL_MACHINE, "htsuna", "123"
End Sub