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註冊函數訪問系統註冊表是十分簡單容易的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章