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注册函数在应用程序中使用。



使用Application画板,创建一个新库Myapp.pbl和应用程序对象Myapp;

使用Window画板,按图1在窗口w_login上放置一个静态文本st_1,在静态文本的属性页中将其Text属性置为"学年度设定:";放置一个编辑掩码控件em_1,在其Mask属性页中,置Mask属性为"####",选中SpinControl属性,置Min属性为"1999";放置一个组框gb_1,在组框的属性页中将其Text属性置为"考试种类选择:";在组框内放置两个单选钮rb_1和rb_2,在单选钮rb_1的属性页中将其Text属性置为"正考",选中Checked属性,在单选钮rb_2的属性页中将其Text属性置为"补考";放置三个命令按钮cb_save、cb_show和cb_delete,在命令按钮cb_save的属性页中将其Text属性置为"保存",在命令按钮cb_show的属性页中将其Text属性置为"显示",在命令按钮cb_delete的属性页中将其Text属性置为"删除"。

给cb_save命令按钮的Clicked事件输入如下脚本代码:
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

给cb_show命令按钮的Clicked事件输入如下脚本代码:
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


给cb_delete命令按钮的Clicked事件输入如下脚本代码:
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

使用Application画板,为Myapp应用对象的Open事件输入如下脚本代码:
Open(w_login)

运行程序,在图1窗口中输入年度1999和选择补考,之后按"保存"按钮,然后在按"显示"按钮,可以看到显示出了正确结果(图2),如果在保存之前或删除之后按"显示"按钮,则出现(图3)结果,说明要找的子键的值不存在。
图2和图3差不多,只是一个保存,一个失败。


当按下"保存"按钮后,点击按钮【开始】→【运行】→键入regedit→【确认】,进入系统注册登记表编辑程序,可以查看到HKEY_CURRENT_USER\Software\PB6\MYAPP\Login子键下的信息如(图4)所示。从上实例可以看出,用PB注册函数访问系统注册表是十分简单容易的。

你可能感兴趣的:(操作,PowerBuilder,注册表,休闲,pb)