CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

求助,注册表操作,高分100

楼主linzhe1314()2006-09-11 12:35:55 在 VB / API 提问

Const   REG_SZ   =   1  
  Const   REG_BINARY   =   3  
  Const   REG_DWORD   =   4  
  Const   HKEY_CURRENT_USER   =   &H80000001  
  Const   HKEY_LOCAL_MACHINE   =   &H80000002  
  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  
          lResult   =   RegQueryValueEx(hKey,   strValueName,   0,   lValueType,   ByVal   0,   lDataBufSize)  
          If   lResult   =   0   Then  
                  If   lValueType   =   REG_SZ   Then  
                          strBuf   =   String(lDataBufSize,   Chr$(0))  
                          lResult   =   RegQueryValueEx(hKey,   strValueName,   0,   0,   ByVal   strBuf,   lDataBufSize)  
                          If   lResult   =   0   Then  
                                  RegQueryStringValue   =   Left$(strBuf,   InStr(1,   strBuf,   Chr$(0))   -   1)  
                          End   If  
                  ElseIf   lValueType   =   REG_BINARY   Then  
                          Dim   strData   As   Integer  
                          lResult   =   RegQueryValueEx(hKey,   strValueName,   0,   0,   strData,   lDataBufSize)  
                          If   lResult   =   0   Then  
                                  RegQueryStringValue   =   strData  
                          End   If  
                    ElseIf   lValueType   =   REG_DWORD   Then  
                          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  
          RegOpenKey   hKey,   strPath,   Ret  
          GetString   =   RegQueryStringValue(Ret,   strValue)  
          RegCloseKey   Ret  
  End   Function  
   
   
  Sub   SaveStringWORD(hKey   As   Long,   strPath   As   String,   strValue   As   String,   strData   As   String)  
          Dim   Ret  
          RegCreateKey   hKey,   strPath,   Ret  
          RegSetValueEx   Ret,   strValue,   0,   REG_DWORD,   CLng(strData),   4  
          RegCloseKey   Ret  
  End   Sub  
   
   
  Sub   DelSetting(hKey   As   Long,   strPath   As   String,   strValue   As   String)  
          Dim   Ret  
          RegCreateKey   hKey,   strPath,   Ret  
          RegDeleteValue   Ret,   strValue  
          RegCloseKey   Ret  
  End   Sub  
   
   
  Path1   =   GetString(HKEY_LOCAL_MACHINE,   "Software\Microsoft\Windows\CurrentVersion\App   Paths\F:\source   fileetBar\Server.exe",   "Path")  
  Text1.Text   =   Path1  
   
  Path2   =   GetString(HKEY_LOCAL_MACHINE,   "Software\Microsoft\Windows\CurrentVersion\App   Paths\source   fileetBar\Server.exe",   "Path")  
  Text2.Text   =   Path2  
   
   
  上面这段代码执行后,为什么text1为空,而text2却不会啊,请问Path1里的那个F:怎么处理才可以读出来啊(path1和path2的差别就是那个F:)  
  我现在要把path1的值读出来,可是读出来的老是NULL值啊 问题点数:100、回复次数:17Top

1 楼happy_sea(开心海(数据读取中,请稍候......))回复于 2006-09-11 13:26:37 得分 10

再检查一下写入注册表的代码吧,注册表里如果没有HKEY_LOCAL_MACHINE,   "Software\Microsoft\Windows\CurrentVersion\App   Paths\F:\source   fileetBar\Server.exe"这个子键,   那你读出来当然是空啊。Top

2 楼linzhe1314()回复于 2006-09-11 13:49:03 得分 0

有的,键值我都知道,只是程序不认识“F:”它啊Top

3 楼linzhe1314()回复于 2006-09-11 13:49:39 得分 0

关键是“F:”那个冒号,怎么处理Top

4 楼happy_sea(开心海(数据读取中,请稍候......))回复于 2006-09-11 14:01:36 得分 0

没见过在注册表中建立这样的键的,你完全可以把"F:\source   fileetBar\Server.exe"这些放入path的值里面啊,为什么非得放在键名里面?Top

5 楼linzhe1314()回复于 2006-09-11 14:03:49 得分 0

别人的软件,我现在要读取的是它的安装目录的路径  
  Top

6 楼zq972(最近不想写代码,好累~~~~)回复于 2006-09-11 14:48:33 得分 0

目录太深了,跟F:没有关系不支持8级目录............  
   
  不信的话   "Software\Microsoft\Windows\CurrentVersion\App   Paths\F:\source   fileetBar\Server.exe"  
  在"Software\Microsoft\Windows\CurrentVersion\App   Paths\F:\source   fileetBar"下建一个键值去读读看就知道了Top

7 楼happy_sea(开心海(数据读取中,请稍候......))回复于 2006-09-11 14:58:46 得分 0

那个作者放的这么深,那他自己能读出来?Top

8 楼linzhe1314()回复于 2006-09-11 15:10:33 得分 0

哦,原来是这样啊,那有什么办法解决的吗Top

9 楼linzhe1314()回复于 2006-09-11 15:16:07 得分 0

作者好像是故意这么做的,请教高手,有什么办法可以解决吗Top

10 楼zq972(最近不想写代码,好累~~~~)回复于 2006-09-11 16:58:15 得分 90

问题找到了  
  应该用  
  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打开键值  
   
  在bas中添加  
  Const   KEY_QUERY_VALUE   =   &H1&  
  Const   KEY_SET_VALUE   =   &H2&  
  Const   KEY_CREATE_SUB_KEY   =   &H4&  
  Const   KEY_ENUMERATE_SUB_KEYS   =   &H8&  
  Const   KEY_NOTIFY   =   &H10&  
  Const   KEY_CREATE_LINK   =   &H20&  
  Const   READ_CONTROL   =   &H20000  
  Const   WRITE_DAC   =   &H40000  
  Const   WRITE_OWNER   =   &H80000  
  Const   SYNCHRONIZE   =   &H100000  
  Const   STANDARD_RIGHTS_REQUIRED   =   &HF0000  
  Const   STANDARD_RIGHTS_READ   =   READ_CONTROL  
  Const   STANDARD_RIGHTS_WRITE   =   READ_CONTROL  
  Const   STANDARD_RIGHTS_EXECUTE   =   READ_CONTROL  
  Const   KEY_READ   =   STANDARD_RIGHTS_READ   Or   KEY_QUERY_VALUE   Or   KEY_ENUMERATE_SUB_KEYS   Or   KEY_NOTIFY  
  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  
   
  再把你的GetString改成  
  Function   GetString(hKey   As   Long,   strPath   As   String,   strValue   As   String)  
          Dim   Ret  
          RegOpenKey   hKey,   strPath,   0,   KEY_READ,   Ret  
          GetString   =   RegQueryStringValue(Ret,   strValue)  
          RegCloseKey   Ret  
  End   Function  
   
   
  再试一下吧  
  Top

11 楼linzhe1314()回复于 2006-09-11 17:43:28 得分 0

提示:  
   
  编译错误:  
   
  错误的参数号或无效的属性值Top

12 楼linzhe1314()回复于 2006-09-12 00:00:58 得分 0

哎,还解决不了啊。。。。。Top

13 楼zq972(最近不想写代码,好累~~~~)回复于 2006-09-12 08:52:47 得分 0

呵呵,我帮你把申明以及函数重写一遍给你好了  
  Public   Const   KEY_QUERY_VALUE   =   &H1&  
  Public   Const   KEY_SET_VALUE   =   &H2&  
  Public   Const   KEY_CREATE_SUB_KEY   =   &H4&  
  Public   Const   KEY_ENUMERATE_SUB_KEYS   =   &H8&  
  Public   Const   KEY_NOTIFY   =   &H10&  
  Public   Const   KEY_CREATE_LINK   =   &H20&  
  Public   Const   READ_CONTROL   =   &H20000  
  Public   Const   WRITE_DAC   =   &H40000  
  Public   Const   WRITE_OWNER   =   &H80000  
  Public   Const   SYNCHRONIZE   =   &H100000  
  Public   Const   STANDARD_RIGHTS_REQUIRED   =   &HF0000  
  Public   Const   STANDARD_RIGHTS_READ   =   READ_CONTROL  
  Public   Const   STANDARD_RIGHTS_WRITE   =   READ_CONTROL  
  Public   Const   STANDARD_RIGHTS_EXECUTE   =   READ_CONTROL  
  Public   Const   KEY_READ   =   STANDARD_RIGHTS_READ   Or   KEY_QUERY_VALUE   Or   KEY_ENUMERATE_SUB_KEYS   Or   KEY_NOTIFY  
  Public   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  
  Public   Const   REG_SZ   =   1  
  Public   Const   REG_BINARY   =   3  
  Public   Const   REG_DWORD   =   4  
  Public   Const   HKEY_CURRENT_USER   =   &H80000001  
  Public   Const   HKEY_LOCAL_MACHINE   =   &H80000002  
  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  
   
   
  Public   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  
          lResult   =   RegQueryValueEx(hKey,   strValueName,   0,   lValueType,   ByVal   0,   lDataBufSize)  
          If   lResult   =   0   Then  
                  If   lValueType   =   REG_SZ   Then  
                          strBuf   =   String(lDataBufSize,   Chr$(0))  
                          lResult   =   RegQueryValueEx(hKey,   strValueName,   0,   0,   ByVal   strBuf,   lDataBufSize)  
                          If   lResult   =   0   Then  
                                  RegQueryStringValue   =   Left$(strBuf,   InStr(1,   strBuf,   Chr$(0))   -   1)  
                          End   If  
                  ElseIf   lValueType   =   REG_BINARY   Then  
                          Dim   strData   As   Integer  
                          lResult   =   RegQueryValueEx(hKey,   strValueName,   0,   0,   strData,   lDataBufSize)  
                          If   lResult   =   0   Then  
                                  RegQueryStringValue   =   strData  
                          End   If  
                    ElseIf   lValueType   =   REG_DWORD   Then  
                          lResult   =   RegQueryValueEx(hKey,   strValueName,   0,   0,   strData,   lDataBufSize)  
                          If   lResult   =   0   Then  
                                  RegQueryStringValue   =   strData  
                          End   If  
                  End   If  
          End   If  
  End   Function  
   
   
  Public   Function   GetString(hKey   As   Long,   strPath   As   String,   strValue   As   String)  
          Dim   Ret   As   Long  
          Dim   a   As   Long  
          a   =   RegOpenKeyEx(hKey,   strPath,   0,   KEY_READ,   Ret)  
          GetString   =   RegQueryStringValue(Ret,   strValue)  
          RegCloseKey   Ret  
  End   Function  
   
  这样就OK了。  
  Top

14 楼linzhe1314()回复于 2006-09-12 09:27:20 得分 0

上面这位热心的大哥,我试了,还是不能用,不知道你有没试,如果你试了能用的话,那可能是我人品有问题吧Top

15 楼zq972(最近不想写代码,好累~~~~)回复于 2006-09-12 09:49:55 得分 0

我试了阿,可以用的,把你的代码发给我,我看看  
  zq972@163.comTop

16 楼zq972(最近不想写代码,好累~~~~)回复于 2006-09-12 09:50:33 得分 0

你要完全copy我的说明到bas文件中去哦Top

17 楼linzhe1314()回复于 2006-09-12 09:57:30 得分 0

请查收,我已经发过去了Top

相关问题

关键词

得分解答快速导航

  • 帖主:linzhe1314
  • happy_sea
  • zq972

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo