Delphi中定義了一個Tregistry類,通過使用這個類中封裝的很多有關對系統資料庫操作的方法和屬性可以完成對系統資料庫的操作。
1、 在系統資料庫中建立一個新的關鍵字
Tregistry類中有一個CreateKey方法,使用該方法可以在系統資料庫中建立一個新的關鍵字,該方法的原型聲明為:function CreateKey(const Key: string) : Boolean;
2、 向系統資料庫關鍵字中寫入相關的資料值
在Tregistry類中提供了一系列的Write方法用來寫入與目前關鍵字相關的資料值。常用方法的原型定義如下:
procedure WriteString(const Name, Value : string);
procedure WriteInteger(const Name : string ; Value : Integer);
procedure WriteFloat(const Name : string ; Value : Double);
procedure WriteTime(const Name : string ; Value : TDateTime);
procedure WriteBool(const Name : string ; Value : Boolean);
3、 從系統資料庫關鍵字中讀出相關的資料值
在Tregistry類中還提供了與Write方法相對應用的用來讀出與目前關鍵字相關的資料值。常用方法的原型定義如下:
founction ReadString(const Name : string) : string;
founction ReadInteger(const Name : string) : Integer;
founction ReadFloat(const Name : string) : Double;
founction ReadTime(const Name : string) : TdateTime;
founction ReadBool(const Name) : Boolean;
4、 從系統資料庫删除關鍵字或指定的資料值
使用Tregistry中提供的DeleteKey和DeleteValue方法可以删除指定的關鍵字和資料值。這兩個方法的原型定義如下:
function DeleteKey(const Key : string) : Boolean;
function DeleteValue(const Key : string) : Boolean;
使用DeleteKey方法删除指定的關鍵字時,如果被删除的關鍵字在任何層次有子關鍵字,它們将同時被删除。上面兩個方法在執行時,如果删除成功,則傳回True;否則傳回False。
5.其他函數
reg.keyexists()
reg.valueexists()

View Code
擷取程式安裝目錄

利用Delphi監視系統資料庫的變化
我們在編寫軟體的時候,常常需要把一些資訊儲存到系統的系統資料庫中。如果使用者更改了系統資料庫的資訊,我們如何及時知道,并做相應的處理呢?通過研究,我們發現在Win98以上作業系統中,微軟在SDK函數庫中增加了RegNotifyChangeKeyValue函數,用于監視系統資料庫特定鍵值的變化。下面我們就怎樣用Delphi編一個系統資料庫螢幕,做詳細地探讨。
關于系統資料庫監視函數
下面是系統資料庫監視函數地聲明:
function RegNotifyChangeKeyValue(
hKey : HKEY, // 需要監視地系統資料庫鍵
bWatchSubtree : LongBool, // 是否監視其子鍵
dwNotifyFilter : Cardinal, // 監視鍵變化的類型
hEvent : Cardinal, // 當有變化時所觸發的通知事件句柄
fAsynchronous : LongBool // 異步通知事件标志
) : integer;
根據MSDN中對該函數的描述,我們對其參數做一下描述:
hKey --我們所要監視的目标鍵值句柄,它必須是已經被打開的。要打開一個系統資料庫鍵可以利用Tregistry 中的OpenKeyReadOnly函數。
dwNotifyFilter ――是一組标志集合,用于辨別我們需要監視的變化類型,它們包括:
REG_NOTIFY_CHANGE_NAME – 增加或删除了子鍵
REG_NOTIFY_CHANGE_ATTRIBUTES – 改變了鍵的屬性
REG_NOTIFY_CHANGE_LAST_SET – 鍵值發生了改變
REG_NOTIFY_CHANGE_SECURITY -鍵的安全屬性發生了改變
hEvent ――當有變化時所觸發的通知事件句柄。我們可以利用SDK函數CreateEvent來建立一個事件。
fAsynchronous ――以異步方式觸發事件标志。
現在我們已經對如何利用該函數有了大體的了解:
1.打開需要監視的系統資料庫鍵
2.建立觸發事件
3.調用系統資料庫監視函數,等待事件觸發。
如果等待事件觸發在主界面中實作,就會造成界面堵塞。一個解決辦法就是,等待事件觸發線上程中實作。
線上程中實作系統資料庫的監視
在Delphi下進行多現成程式設計并不需要去學習龐大的Win32 API函數,我們可以利用Delphi标準的多線程類Tthread來完成我們的工作。
Tthread是一個抽象類――一個帶有虛拟抽象方法的類,不能直接使用它。要做的是把Tthread作為基類,用繼承的形式來生成子類。實際上,根據TThread來寫線程應用是非常容易的。
1. 無論何時建立一個TThread對象,首先要建立它的派生類。
2. 每次建立一個TThread對象的派生類的時候,都要重載Execute方法。
我們可以利用Delphi的向導,來生成建立TThread派生類的代碼:
選擇Delphi的File菜單下的New選項,再選擇“TThread Object”項目,Delphi就會構造基本的程式子產品,然後我們再根據需要做相應修改。如下圖我們建構了一個系統資料庫監視線程:
下面我們看看該線程是如何實作對系統資料庫的監視的:

我們可以看到,Execute 過程實際上是一個循環,結束的條件是程序退出。在循環中,調用WaitForSingleObject API函數進入等待狀态,直到FEvent 對象變為有信号狀态。可以看出我們所等待的Fevent ,RegNotifyChangeKeyValue 曾經調用。
注意,Fevent 被觸發後,我們用SendMessage 發送消息到主視窗,下面我們對此做詳細讨論。
利用自定義消息傳遞監視資訊
消息是Windows發出的一個通知,它告訴應用程式某個事件發生了。在Delphi中,大多數情況下Windows的消息被封裝在VCL的事件中,我們隻需處理相應的VCL事件就可以了,但如果我們需要利用自己定義的消息實作某些功能,再Delphi中是如何實作的呢?下面我們看看是如何利用自定義消息傳遞監視資訊的:
1. 首先定義自定義休息WM_REGCHANGE:
WM_REGCHANGE = WM_USER + 1973;
2. 聲明主窗體中消息響應應函數:
procedure WMREGCHANGE(var Msg : TMessage); message WM_REGCHANGE;
3. 實作消息響應函數:

我們在主界面上放了一個TMemo控件,用于顯示系統資料庫監視資訊,在消息響應函數中,監視資訊在TMemo控件中的顯示。
本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/oury/archive/2005/04/12/343722.aspx
通過系統資料庫監視已安裝軟體

注冊檔案類型

注冊檔案類型,設定檔案圖示
