《大侠救命》VB操作注册表(已解决)
目的是这样:我做这样一个界面,有两个按钮cmd1、cmd2和两个文本框text1,ttext2按cmd1按钮的时候在文本框1和2中显示注册表键HKEY_CURRENT_USER\consle\colortable00的键名和键值
并在修改键值后按cmd2保存修改生效。
在调用RegOpenKeyEx函数的时候其中有5个参数
ByVal hKey As Long, ByVal lpSubKey As String,
ByVal ulOptions As Long, ByVal samDesired As Long,
phkResult As Long
但是这个函数返回的是键的句柄,我要显示键值该怎么做呢?
也许应该用到Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
这个函数……我也不知道,请高手指点。万谢
[[it] 本帖最后由 hjtai 于 2008-5-29 17:07 编辑 [/it]]
[[it] 本帖最后由 hjtai 于 2008-5-29 17:09 编辑 [/it]] 看标题以为是什么有意思的,没想到内容这么无趣。大不了以后标题不把问题描述清楚的帖子我直接略去。
注册表操作的函数和类网上非常多,随便找一个参考不就行了么? 显示键值要看键值的类型,不同的类型用的API不同
就简单的两个API而己,自己看看REG打头的API函数吧 '这里有一个实例,看下他是怎么取不同类型的键值吧,这里边的函数你可以直接复制去调用
'This program needs 3 buttons
Const REG_SZ = 1 ' Unicode nul terminated string
Const REG_BINARY = 3 ' Free form binary
Const HKEY_CURRENT_USER = &H80000001
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
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 RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) 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 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
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
Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
Dim lResult As Long, lValueType As Long, strBuf As String, lDataBufSize As Long
'retrieve nformation about the key
lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
If lResult = 0 Then
If lValueType = REG_SZ Then
'Create a buffer
strBuf = String(lDataBufSize, Chr$(0))
'retrieve the key's content
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
If lResult = 0 Then
'Remove the unnecessary chr$(0)'s
RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
End If
ElseIf lValueType = REG_BINARY Then
Dim strData As Integer
'retrieve the key's value
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
If lResult = 0 Then
RegQueryStringValue = strData
End If
End If
End If
End Function
Function GetString(hKey As Long, strPath As String, strValue As String)
Dim Ret
'Open the key
RegOpenKey hKey, strPath, Ret
'Get the key's content
GetString = RegQueryStringValue(Ret, strValue)
'Close the key
RegCloseKey Ret
End Function
Sub SaveString(hKey As Long, strPath As String, strValue As String, strData As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Save a string to the key
RegSetValueEx Ret, strValue, 0, REG_SZ, ByVal strData, Len(strData)
'close the key
RegCloseKey Ret
End Sub
Sub SaveStringLong(hKey As Long, strPath As String, strValue As String, strData As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Set the key's value
RegSetValueEx Ret, strValue, 0, REG_BINARY, CByte(strData), 4
'close the key
RegCloseKey Ret
End Sub
Sub DelSetting(hKey As Long, strPath As String, strValue As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Delete the key's value
RegDeleteValue Ret, strValue
'close the key
RegCloseKey Ret
End Sub
Private Sub Command1_Click()
Dim strString As String
'Ask for a value
strString = InputBox("Please enter a value between 0 and 255 to be saved as a binary value in the registry.", App.Title)
If strString = "" Or Val(strString) > 255 Or Val(strString) < 0 Then
MsgBox "Invalid value entered ...", vbExclamation + vbOKOnly, App.Title
Exit Sub
End If
'Save the value to the registry
SaveStringLong HKEY_CURRENT_USER, "KPD-Team", "BinaryValue", CByte(strString)
End Sub
Private Sub Command2_Click()
'Get a string from the registry
Ret = GetString(HKEY_CURRENT_USER, "KPD-Team", "BinaryValue")
If Ret = "" Then MsgBox "No value found !", vbExclamation + vbOKOnly, App.Title: Exit Sub
MsgBox "The value is " + Ret, vbOKOnly + vbInformation, App.Title
End Sub
Private Sub Command3_Click()
'Delete the setting from the registry
DelSetting HKEY_CURRENT_USER, "KPD-Team", "BinaryValue"
MsgBox "The value was deleted ...", vbInformation + vbOKOnly, App.Title
End Sub
Private Sub Form_Load()
Command1.Caption = "Set Value"
Command2.Caption = "Get Value"
Command3.Caption = "Delete Value"
End Sub 恩,白激动一场。我还以为又是什么好的讨论话题呢 啊? 呵呵,谢谢大家了。没想到初来乍到就把大家雷到了。不好意思……跪求版主结帖,不要再让我被鄙视了~~ [quote][bo][un]hjtai[/un] 在 2008-5-28 20:08 的发言:[/bo]
啊? 呵呵,谢谢大家了。没想到初来乍到就把大家雷到了。不好意思……跪求版主结帖,不要再让我被鄙视了~~ [/quote]
不知道是不是要我提醒你帖子是可以被作者编辑的(或者说作者是可以编辑自己的帖子的)。
为什么你们总要认为版主自己没事情做呢?版主也有自己的工作,也是很忙的。 [quote][bo][un]multiple1902[/un] 在 2008-5-28 20:57 的发言:[/bo]
不知道是不是要我提醒你帖子是可以被作者编辑的(或者说作者是可以编辑自己的帖子的)。
为什么你们总要认为版主自己没事情做呢?版主也有自己的工作,也是很忙的。 [/quote]
饿……不好意思了。不要因为我一个人的无知要求就把别人也顺带鄙视了嘛。拿出点做版主的胸怀来么
页:
[1]
