lResult = OSRegOpenKey(hKey, lpszSubKey, phkResult)
   If hKey = 0 Then
      MsgBox "系统安装停止!", vbCritical + vbOKOnly
   End If
   Err.Clear
   MyReturn = OSRegSetValueEx(hKey, "AAA", 0&, REG_SZ, ByVal strData,  LenB(StrConv(strData, vbFromUnicode)) + 1)
用上述代码在注册表中写入AAA记录内容为strData,数据正确
现想将"AAA"的内容读出,用
MyReturn = RegQueryValueEx(hKey, "AAA", 0&, REG_SZ, ByVal st, Null)
可是st返回都为"",哪位老大帮帮忙,最好能够顺便解释一下上个函数的最后一个参数是什么意思.,怎么使用,谢谢了

解决方案 »

  1.   

    st
    先给分配控件
    dim st as string* 255

    st=space(255)
      

  2.   

    我试了,还是不行啊,哪位能够给个例子啊
    MyReturn = RegQueryValueEx(hKey, "AAA", 0&, REG_SZ, ByVal st, Null)
    该函数最后一个参数为LONG,应该是什么东西啊
      

  3.   

    这个东西开始也困扰了我一下,我测试的解决方法如下
    1、你需要创建缓冲区来传递给RegqueryValueEx方法
    st = space(255)
    stLong = 2552、将参数传递给RegqueryValueEx方法
    MyReturn = RegQueryValueEx(hKey, "AAA", 0&, REG_SZ, ByVal st, stLong)3、将st变成实际长度
    st = left(st, stLong - 1)在函数RegQueryValueEx的声明中stLong既是传入参数也是返回参数,所以你在之前要设定一个值给他表示st的长度,他也会返回一个值给你告诉你实际st的长度。
      

  4.   

    http://expert.csdn.net/Expert/topic/2222/2222217.xml?temp=.2462427你希望你的程序能访问 Windows 注册表吗?当然,能访问庞大的 Windows 注册表是每个程序设计者都希望的事情,那么我就告诉你如何通过API函数访问 Windows 注册表吧。请先看看下面的 Visual Basic 程序:   '根键常数
      Const HKEY_CLASSES_ROOT = -2147483648#
      Const HKEY_CURRENT_USER = -2147483647#
      Const HKEY_LOCAL_MACHINE = -2147483646#
      Const HKEY_USERS = -2147483645#  '键值类型
      Const REG_SZ = 1& '字符串值
      Const REG_BINARY = 3& '二进制值
      Const REG_DWORD = 4& 'DWORD 值  '声明有关API函数
      Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
        ( _
         ByVal hKey As Long, _
         ByVal lpSubKey As String, _
         ByRef phkResult As Long _
         ) As Long '建立一个新的主键  Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
        ( _
         ByVal hKey As Long, _
         ByVal lpSubKey As String, _
         ByRef phkResult As Long _
        ) As Long '打开一个主键  Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
       ( _
        ByVal hKey As Long, _
        ByVal lpSubKey As String _
       ) 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, _
        ByVal lpData As Any, _
        ByVal cbData As Long _
       ) As Long '创建或改变一个键值,lpData应由缺省的ByRef型改为ByVal型  Private 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 '查询一个键值,lpData应由缺省的ByRef型改为ByVal型  Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" _
       ( _
        ByVal hKey As Long, _
        ByVal lpValueName As String _
        ) As Long '删除一个键值  '主过程
      Sub Main()
       Dim nKeyHandle As Long, nValueType As Long, nLength As Long
       Dim sValue As String
       sValue = "I am a winner!"
       Call RegCreateKey(HKEY_CURRENT_USER, "New Registry Key", nKeyHandle)
       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  来看看程序运行的结果:  在注册表的 HKEY_CURRENT_USER 根键中多了一个 New Registry Key 主键。其中除有一个空的“(默认)”值外,还有一个值为“I am a winner!”的“My Value”值
      下面我们来分析一下这个程序:  首先是定义常量。前面四个常量是各根键的句柄,这些句柄都是固定的;后三个是键值类型,在注册表编辑器中右键单击主键弹出的“新建”菜单项中,可以看到这三个键值类型。  
      第二步是声明API函数。这一步可以通过“API 文本浏览器”来完成:用“API 文本浏览器”加载文件“Win32Api.txt”,查找出上例中的 API 函数并添加到“选定项”一栏中,点取“复制”按钮,再回到 VB 程序编辑环境,将剪贴板中的内容粘贴到VB程序编辑器中,这样就完成了 API 函数的声明过程。值得注意的是,“RegSetValueEx”和“ RegQueryValueEx”两个函数中的“lpData”被定义为“Any”类型的,却没有定义传递方式,于是它被默认为“ByRef”传递方式。经笔者测试,这样不能正确的设置或查询键值,但将其传递方式改为“ByVal”后,便 OK 了。    第三步便是在访问注册表了。“RegOpenKey”的用法与“RegCreateKey”的用法是类似的,前者用于打开一个已存在的主键,而后者除了能用于打开一个已存在的主键外,如果该主键不存在,还能创建这个主键。打开或创建主键成功后将返回一个句柄给参数“phkResult”,这个句柄将在对键值的操作中用到,它就是“RegSetValueEx”、“RegQueryValueEx”和“RegDeleteValue”中的“nKeyHandle”参数。  还有一点需要说明,每个主键中都有一个键值名显示为“(默认)”,但其键值名并不就是“(默认)”,而是一个空字符串。   现在,你知道怎样通过API函数访问Windows注册表了吗?
      

  5.   

    RegQueryValueEx VB声明 
    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 
    说明 
    获取一个项的设置值 
    返回值 
    Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码 
    参数表 
    参数 类型及说明 
    hKey Long,一个已打开项的句柄,或者指定一个标准项名 
    lpValueName String,要获取值的名字 
    lpReserved Long,未用,设为零 
    lpType Long,用于装载取回数据类型的一个变量 
    lpData Any,用于装载指定值的一个缓冲区 
    lpcbData Long,用于装载lpData缓冲区长度的一个变量。一旦返回,它会设为实际装载到缓冲区的字节数