PB操作注册表

PB操作注册表

/读取注册表中的值

RegistryGet("HKEY_CURRENT_USER\Software\Microsoft\abc","SERVER_NAME",RegString!,str_server)

//设置注册中的值

RegistrySet("HKEY_CURRENT_USER\Software\Microsoft\abc","SERVER_NAME",RegString!,str_server)

 

====================================================

一、注册表相关知识


1、了解几个与注册表相关的关键字


了解这几个关键字将有助于更清晰的理解函数的作用,以及下文中对每个函数的解释。

Key(键):在PB与注册表相关的函数中,都有一个key参数,指的是注册表中的从根键开始的键值,如下图中最下方的方框中的数据。

Subkey(子键)

Value item(键值项):指某一键的具体参数;每个键值项都有键值项名称(valuename)、键值项类型(valuetype)及键值项数据(value)三部分内容。每一个键都会有一个默认的键值项和一个或多个命名的键值项。

2、注册表中常用的数据类型


在下表中列出了注册表中常用的数据类型,即与函数中valuetype相对应的内容。它有助于了解PB函数中valuetype这个枚举型的参数。



类型 说明

REG_BINARY 可以包含任何数据的二进制对象颜色描述

REG_DWORD DWORD值

REG_DWORD_BIG_ENDIAN 一个DWORD值的逆序存储形式

REG_DWORD_LITTLE_ENDIAN DWORD值

REG_EXPAND_SZ 包含环境变量占位符的字符串

REG_LINK 命名一个符号链接(symbolic link)的Unicode串

REG_MULTI_SZ 以null字符分隔的字符串集合,集合中的最后一个字符串以两个null字符结尾

REG_SZ 以null字符分隔的字符串


表1:注册表中常用的数据类型:

二、PB中的注册表操作函数

在PB中,与注册表相关的函数一共有五个,利用这些函数,可以进行对系统注册表数据的读写操作,实现对注册表编程的需求。这五个函数分别是:

RegistryGet:用来得到某个键的一个键值项的键值项数据。即上图中右侧‘数据’部分中的内容

RegistrySet:为键或键的键值项赋值或者创建一个新的键或键值项。

RegistryKeys:得到某键的子键

RegistryValues:得到某键的各键值项的名称,即上图中‘名称’部分中的内容

RegistryDelete:删除某些键或键值项

首先说明一个在上述五个函数中都必须的一个参数:key:

key是字符串型数据,保存的是要对其进行操作的键,例如上图中状态框中‘HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE’这部分内容。为保证键值的唯一性,必须从根键开始写起,直到要用到的子键的键名都要按上面的方式写出来,并以斜线分开各子键。
RegistryGet

语法:RegistryGet ( key, valuename, { valuetype }, valuevariable )

参数
类型
说明

ValueName
String
键值项名称,即上图中‘名称’部分的内容。每个键都会有一个没有命名的键值项和几个命名的键值项,对于没有命名的键值项,须指定一个空的字符串。

Valuetype
枚举
指明‘ValueName’所指的键值项的数据类型。共有七种:RegString!、RegExpandString!、RegBinary!、ReguLong!、ReguLongBigEndian!、RegLink!和RegMultiString!。它们是和上图中‘类型’这一部分相对应的。见表1

Valuevariable
不定
与‘valuetype’相匹配的数据类型用来存储取出的键值。

返回值:当成功时返回1,失败是返回-1。

一般情况下,失败的原因是‘valueType’和‘Valuevariable’两者的类型不匹配,或者‘valuetype’和注册表键值的数据类型不匹配。

实例:获得某软件的安装目录

例如在上图中,若想取出ORACLE的安装目录,则可进行如下的操作:

string ls_orasysdir
integer li_rtn 
li_rtn=registryGet('HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE','ORACLE_HOME',Regstring!,ls_orasysdir) 
if li_rtn < 1 then 
messagebox('error','read regedit error') 
else 
messagebox('value',ls_orasysdir) 
end if 


其中,ls_orasysdir中存储的就是oracle的安装目录:e:\oracle\ora81
RegistrySet

语法:RegistrySet ( key, valuename, valuetype, value )

参数:参数中前三项与RegistryGet中的参数意义相同。

Value 是要设置的数据,同样,它必须与valuetype的数据类型相同。

返回值:同RegistryGet函数。

实例:动态设置ODBC

//将数据源名称“ex”注册到“HKEY_CURRENT_USER\software\odbc\odbc.ini\odbc data sources”下。


registryset(“HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI\ODBC DATA SOURCES”, “ex”,regstring!, “sybase sql anywhere 5.0”)


//在"HKEY_CURRENT_USER\software\odbc\odbc.ini"下新增以该数据源名称"ex"为键名的子键


registryset(“HKEY_CURRENT_USER\software\odbc\odbc.ini\ex”, “ ”,regstring!, “ ”)


//创建连接到数据源所需要的参数


registryset(“HKEY_CURRENT_USER\software\odbc\odbc.ini\ex”, “autostop”,regstring!, “yes”)


registryset(“HKEY_CURRENT_USER\software\odbc\odbc.ini\ex”, “databasefile”,regstring!, “c:\pb\ex.db”)


registryset(“HKEY_CURRENT_USER\software\odbc\odbc.ini\ex”, “databasename”,regstring!, “ex”)


registryset(“HKEY_CURRENT_USER\software\odbc\odbc.ini\ex”, “driver”,regstring!, “wod50t.dll”)


registryset(“HKEY_CURRENT_USER\software\odbc\odbc.ini\ex”, “pwd”,regstring!, “sql”)


registryset(“HKEY_CURRENT_USER\software\odbc\odbc.ini\ex”, “start”,regstring!, “dbeng50 -Q”)


registryset(“HKEY_CURRENT_USER\software\odbc\odbc.ini\ex”, “uid”,regstring!, “dba”)

Registrykeys

语法:Registrykeys(key,subkeys)

参数:


subkeys:一个字符串型的数组,用来存储需要的子键。如果该数组是变长的,则它的上限就是子键的数目;如果是固定大小的,则必须保证它的大小可用容纳所有的子键,否则的话,就无法知道,该键实际有多少个子键。

返回值:成功为1,当发生错误时失败,返回-1。

实例:得到上图中“HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE”的子键的个数及各子键。

string ls_orakey[],ls_temp


integer li_rtn,i


long ll_upper


li_rtn=registrykeys(“HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE”,ls_orakey)


if li_rtn < 1 then


messagebox('error','read regedit error')


else


ll_upper=upperbound(ls_orakey)


ls_temp='has '+string(ll_upper)+' subkeys ~t~r'


for i = 1 to ll_upper


ls_temp=ls_temp+'subkey'+string(i)+'='+ls_orakey[i]+'~t~r'


next


messagebox('subkey',ls_temp)


end if


返回结果:


has 4 subkeys


subkey1=ALL_HOMES


subkey2=HOME0


subkey3=OLEDB


subkey4=OO4O
Registryvalues

语法:Registryvalues(key,valuename)

参数:


valuename:一个字符串型的数组,用来存储需要的键值项的名称。如果该数组是变长的,则它的上限就是子键的数目;如果是固定大小的,则必须保证它的大小可用容纳所有的键值项,否则的话,就无法知道,该键实际有多少个键值项。

返回值:成功为1,当发生错误时失败,返回-1。

实例:得到上图中”HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE”键下各键值项的名称。

程序与上例相同,只需将函数变为Registryvalues,数组变为存储键值项名称的数组即可。

返回结果如下:


has 9 named values


named values1=inst_loc


named values2=ORACLE_HOME


named values3=ORACLE_HOME_NAME


named values4=API


named values5=ORACLE_GROUP_NAME


named values6=NLS_LANG


named values7=OLEDB


named values8=VOBHOME2.0


named values9=OO4O


RegistryDelete

语法:RegistryDelete ( key, valuename )

参数:


key:字符型,需删除的键,或者包含有需删除的键值项的键。

valuename:字符型,指出键值项的名称,如果所指定的键不含有子键,则可用空字符串表明删除键及其所有键值项。

返回值:同上。

实例:
该实例用来删除一个名为“Title”的键值项及其相关的数值;但键不会被删除。
RegistryDelete(“HKEY_LOCAL_MACHINE\Software\MyApp.Settings\Fonts”, “Title”) 
而用
RegistryDelete( “HKEY_LOCAL_MACHINE\Software\MyApp.Settings\Fonts”, “ ”) 
则可以删除该键。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值