| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 379 人关注过本帖
标题:关于注册表读写两个帖子总结一下这两天的实验结果,帮解释一下!谢了!
只看楼主 加入收藏
wxflw
Rank: 6Rank: 6
等 级:侠之大者
帖 子:325
专家分:435
注 册:2012-1-29
结帖率:87.21%
收藏
已结贴  问题点数:20 回复次数:4 
关于注册表读写两个帖子总结一下这两天的实验结果,帮解释一下!谢了!
Option Explicit
 Global Const REG_SZ As Long = 1
 Global Const REG_DWORD As Long = 4
 Global Const HKEY_CLASSES_ROOT = &H80000000
 Global Const HKEY_CURRENT_USER = &H80000001
 Global Const HKEY_LOCAL_MACHINE = &H80000002
 Global Const HKEY_USERS = &H80000003
 
Global Const ERROR_NONE = 0
 Global Const ERROR_BADDB = 1
 Global Const ERROR_BADKEY = 2
 Global Const ERROR_CANTOPEN = 3
 Global Const ERROR_CANTREAD = 4
 Global Const ERROR_CANTWRITE = 5
 Global Const ERROR_OUTOFMEMORY = 6
 Global Const ERROR_INVALID_PARAMETER = 7
 Global Const ERROR_ACCESS_DENIED = 8
 Global Const ERROR_INVALID_PARAMETERS = 87
 Global Const ERROR_NO_MORE_ITEMS = 259
 
Global Const KEY_ALL_ACCESS = &H3F
 
Global Const REG_OPTION_NON_VOLATILE = 0
 
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
 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, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
 Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
 Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
 Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
 Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
 Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
 Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
 Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
 Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)
 
Public Function DelKey(lKey As Long, sKeyName As String)
     Dim lVal As Long
     Dim hKey As Long
     lVal = RegOpenKeyEx(lKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
     lVal = RegDeleteKey(lKey, sKeyName)
     RegCloseKey (hKey)
 End Function
 
Public Function DelVal(lKey As Long, sKeyName As String, sValueName As String)
     Dim lVal As Long
     Dim hKey As Long
     lVal = RegOpenKeyEx(lKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
     lVal = RegDeleteValue(hKey, sValueName)
     RegCloseKey (hKey)
 End Function
 
Public Function SetVal(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
     Dim lValue As Long
     Dim sValue As String
     Select Case lType
     Case REG_SZ
         sValue = vValue
         SetVal = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
     Case REG_DWORD
         lValue = vValue
         SetVal = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
     End Select
 End Function
 
Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
     Dim cch As Long
     Dim lrc As Long
     Dim lType As Long
     Dim lValue As Long
     Dim sValue As String
     On Error Resume Next
     lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
     If lrc <> ERROR_NONE Then Error 5
     Select Case lType
     Case REG_SZ
         sValue = String(cch, 0)
         lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
         If lrc = ERROR_NONE Then
             vValue = Left$(sValue, cch)
         Else
             vValue = Empty
         End If
     Case REG_DWORD
         lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
         If lrc = ERROR_NONE Then vValue = lValue
     Case Else
         lrc = -1
     End Select
     QueryValueEx = lrc
 End Function
 
Public Function CreateNewKey(lKey As Long, sNewKeyName As String)
     Dim hNewKey As Long
     Dim lVal As Long
     lVal = RegCreateKeyEx(lKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lVal)
     RegCloseKey (hNewKey)
 End Function
 
Public Function SetKeyValue(lKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
     Dim lVal As Long
     Dim hKey As Long
     lVal = RegOpenKeyEx(lKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
     lVal = SetVal(hKey, sValueName, lValueType, vValueSetting)
     RegCloseKey (hKey)
 End Function
 
Public Function QueryValue(lKey As Long, sKeyName As String, sValueName As String)
     Dim lVal As Long
     Dim hKey As Long
     Dim vValue As Variant
     lVal = RegOpenKeyEx(lKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
     lVal = QueryValueEx(hKey, sValueName, vValue)
     QueryValue = vValue
     RegCloseKey (hKey)
 End Function
 
'写
 SetKeyValue HKEY_CURRENT_USER, "Software\AAAAAA\setfil", "set", A, REG_SZ  ’ZCle是楼上A的值
 '读
 A=QueryValue(HKEY_CURRENT_USER, "Software\AAAAAA\setfil", "set")'因为刚学这个注册表的东西好多都看不懂,只能一样一样来通过测试去理解每个函数的意思,我一直都是这么学起来的
 这两天就和这个干上了,转了两天才发现了问题,问题描述如下:
    写入的时候是把字符串先拆分3段然后又合并成一段写入注册表的96位
但是读取出来后用len(A)发现字符串长度变成97了,可是在text1.text显示的还是那96个字符,没有发现有空格,所以一开始为什么A<>B的原因估计就是出在这里
我后来用两个text来看看两个字符串有神恶魔变化,可是看不出来,一模一样,但是取出的字符串偏偏多了一个字节。求解释一下!帮帮忙。先谢谢了!
搜索更多相关主题的帖子: 注册表 
2012-12-04 11:02
mayuebo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:257
专家分:1282
注 册:2005-9-8
收藏
得分:5 
最后一位是换行.文本框是显示不出来的.

注册表相关的操作一个是读,一个是写.一个是建立键值.只不过建立键值时要类型区分

成功贵在坚持
2012-12-04 14:35
wxflw
Rank: 6Rank: 6
等 级:侠之大者
帖 子:325
专家分:435
注 册:2012-1-29
收藏
得分:0 
回复 2楼 mayuebo
怎么去掉换行?

学习--------------学习-------------------学习--------------------!!
2012-12-04 16:08
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:15 
left(a,96)

无知
2012-12-05 13:03
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
以下是引用wxflw在2012-12-4 16:08:53的发言:

怎么去掉换行?


VB6中的换行符号是VbCrLf
ASCII组合码为Chr(10)+Chr(13)
C中的换行符号和VB6不同
ASCII组合码为Chr(10)

我不确定这是编程语言定义上的问题
还是操作系统定义上的问题
或是其他....只知道有这两种

不要投我
2012-12-05 16:54
快速回复:关于注册表读写两个帖子总结一下这两天的实验结果,帮解释一下!谢了! ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023946 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved