在PB应用程序中实现对系统注册登记表的访问
湖南广播电视大学教务处计算机室 刘 珊
系统注册登记表是Windows 9x中所有配制信息的中央仓库。它除了保存操作系统自身的软件、硬件及环境信息外,另一个用途就是保存应用程序中用户定制的配制信息。把应用程序保存到系统注册登记表中的方法是使应用程序的适用性提高的最佳方法之一。
在PowerBuilder应用程序中,通过使用PB内嵌的注册函数对系统注册登记表的访问,可以方便地设置和获取应用程序及用户设置的信息:如进入应用程序时,通过访问系统注册登记表来获取主窗口的原有大小及位置信息,而退出程序时可保存用户改变了的窗口大小及位置信息;可以将用户的设置保存到系统注册登记表中,在必要时从系统注册登记表中取出;亦可创建一个.REG文件(注册登记)来安装自己的应用程序,以及实现存取ODBC驱动信息等等。
PB注册(Registry)函数
在PowerBuilder6.0中内嵌的注册函数有5条,分别是RegistrySet、RegistryGet、RegistryDelete、RegistryKeys、和RegistryValues,需要注意的是,这组函数只能在MicrosoftWindows系统中使用,下面是这五个函数的详细用法:
1.RegistrySet(key,valuename,valuetype,value)
| key | String 类型,指定键名 |
| valuename | String 类型,指定要访问值或创建新值的名称 |
| valuetype | RegistryValueType枚举类型,指定值的数据类型 |
| value | 要设置的值,其数据类型应与valuetype参数指定的类型相匹配 |
| 返回值 | 函数执行成功时返回1,发生错误时返回-1 |
RegistrySet()的功能是在系统注册登记表中设置或创建指定键和值,如果要设置的键名或要设置的值不存在,则先建立再赋值。
如下面的代码在系统注册登记表中设置或创建了应用程序MyApp运行时读写文件或访问图形及其他对象时的路径:
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\PB6\MYAPP\Application",&
"Path",RegString!,"C:\MyApp")
2.RegistryGet(key,valuename,valuetype,valuevariable)
| Key | String 类型,指定键名 |
| Valuename | String 类型,指定要访问值的名称 |
| Valuetype | RegistryValueType枚举类型,指定值的数据类型 |
| Valuevariable | 用于保存键值的变量,其数据类型应与valuetype参数指定的类型相匹配 |
| 返回值 | 函数执行成功时返回1,发生错误时返回-1 |
RegistryGet()的功能是从系统注册表得到指定键的值。如下面的代码在系统注册登记表中获取应用程序MyApp读写文件或访问图形及其他对象时的路径于变量ls_Path中:
String ls_Path
RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\PB6\MYAPP\Application",&
"Path",RegString!,ls_Path)
3.RegistryDelete(key,valuename)
| Key | String 类型,指定键名,将删除该键或该键的某个值 |
| Valuename | String 类型,指定要删除的值的名称 |
| 返回值 | 函数执行成功时返回1,发生错误时返回-1 |
RegistryDelete()的功能是删除系统注册登记表中的一个键或键的某个值。如想删除键、键的值、以及其下的所有子键,将valuename参数指定为空字符串。
如下面的代码删除系统注册登记表中应用程序MyApp读写文件或访问图形及其他对象时的路径:
li_return = RegistryDelete("HKEY_LOCAL_MACHINE\
SOFTWARE\PB6\MYAPP\Application","Path")
4.RegistryKeys(key,subkeys)
| Key | String 类型,指定键名 |
| Subkeys | 字符串数组变量,用于保存各子键 |
| 返回值 | 函数执行成功时返回1,发生错误时返回-1 |
RegistryKeys()的功能是从系统注册登记表中得到指定键的有效子键。
如下面的代码在系统注册登记表中得到应用程序MyApp的所有子键:
String ls_subkeylist[]
li_return = RegistryKeys("HKEY_LOCAL_MACHINE\
SOFTWARE\PB6\MYAPP",ls_subkeylist)
5.RegistryValues(key,valuename)
| Key | String 类型,指定键名 |
| Valuename | 字符串数组变量,用于保存各值名 |
| 返回值 | 函数执行成功时返回1,发生错误时返回-1 |
RegistryValues()的功能是从系统注册登记表中得与指定键相关的一组值名。如下面的代码得到为用程序MyApp定义的子键Application的值名,并将它保存在动态数组ls_valuearray中:
String ls_valuearray[]
li_return = RegistrySet("HKEY_LOCAL_MACHINE
\SOFTWARE\PB6\MYAPP\Application",ls_valuearray)
程序实例
下面以一个简单的实例来说明PB注册函数在应用程序中使用。

String ls_Login_key
Integer li_return1,li_return2
ls_Login_key = "HKEY_CURRENT_USER\Software\PB6\MYAPP\Login"
li_return1 = RegistrySet(ls_Login_key,
"Year",RegString!,em_1.text)
IF rb_1.checked THEN
li_return2 = RegistrySet(ls_Login_key,
"Examin",RegString!,rb_1.text)
END IF
IF rb_2.checked THEN
li_return2 = RegistrySet(ls_Login_key,
"Examin",RegString!,rb_2.text)
END IF
IF li_return1 = 1 AND li_return2 = 1 THEN
MessageBox("保存信息显示","Login子键的值已保存!")
ELSE
MessageBox("保存信息显示","Login子键的值未能保存!")
END IF
RETURN
String ls_Login_key,ls_Year,ls_Examin
ls_Login_key = "HKEY_CURRENT_USER\Software\PB6\MYAPP\Login"
IF RegistryGet(ls_Login_key,
"Year",RegString!,ls_Year) = 1 &
AND RegistryGet(ls_Login_key,
"Examin",RegString!,ls_Examin) = 1 THEN
MessageBox("Login子键信息显示",
" 年度:"+ls_Year+char(13)&
+"考试种类:"+ls_Examin)
ELSE
MessageBox("Login子键信息显示","获取Login子键信息失败!")
END IF
RETURN
String ls_Login_key
ls_Login_key = "HKEY_CURRENT_USER
\Software\PB6\MYAPP\Login"
IF RegistryDelete(ls_Login_key,"") = 1 THEN
MessageBox("删除信息显示","Login子键已删除!")
ELSE
MessageBox("删除信息显示","未能删除Login子键!")
END IF
RETURN
Open(w_login)


