當我們打開“控制面板”以後,能看到許多項目,如:系統、顯示器等。不過,這些項目並非指向某些可執行的程序,其實,它們是一些特殊的動態鏈接庫,在Windows裡注冊的類型是“控制面板擴展”,文件的擴展名是“CPL”。
這種“控制面板擴展”與普通動態鏈接庫(DLL)類似,但必須符合以下的要求:
1.該動態鏈接庫必須輸出一個CplApplet函數,這個函數包含了一些消息,函數的原型如下:
function CPlApplet(hwndCPL: HWND; uMsg: UINT;
lParam1: LPARAM; lParam2: LPARAM): LongInt; stdcall;
2.該動態鏈接庫的擴展名是“CPL”,位於Windows的系統目錄下,通常是“\Windows\System”;
3.函數CplApplet必須處理的消息包括:CPL—INIT、CPL—GETCOUNT、CPL—NEWINQUIRE、CPL—DBLCLK等:
CPL—INIT:表示程序被(控制面板)發現,返回True或False表示是否繼續進行下去。
CPL—GETCOUNT:確定程序在控制面板中顯示的個數,返回值為顯示的個數。
CPL—NEWINQUIRE:用於填寫程序的信息。
CPL—DBLCLK:當圖標被雙擊時觸發,這時可以顯示一個Form。
在Delphi中新建一個工程,選擇“DLL”,Delphi就會自動創建一個動態鏈接庫的框架,先把這個工程存為“myCPL.dpr”,然後新建一個Form,保存為main.pas。
myCPL.dpr的內容如下:
library mycpl;
uses
Windows,
SysUtils,
CPL,
Forms,
main in ′main.pas′ {MainForm};
{$E cpl} //表示擴展名是CPL
{$R *.res}
function CPlApplet(hwndCPL: HWND; uMsg: UINT;
lParam1: LPARAM; lParam2: LPARAM) : LongInt; stdcall;
var
pNewInfo: PNewCPlInfo;
begin
case uMsg of
CPL—INIT:
begin
Result := 1;
end;
CPL—GETCOUNT:
begin
Result := 1;
end;
CPL—NEWINQUIRE:
begin
pNewInfo:=PNewCPlInfo(lParam2);
with pNewInfo^ do
begin
dwSize:=sizeof(TNewCPLInfo);
dwFlags:=0;
StrPLCopy(szName,′新建項目′, 31);
StrPLCopy(szInfo, ′我的選項′, 63);
end;
end;
CPL—DBLCLK:
begin
with TMainForm.Create(Application) do
ShowModal;
Result:=0;
end;
end;
end;
exports
CPlApplet;
begin
end.
把編譯好的mycpl.cpl拷貝到Windows的System目錄下後,打開“控制面板”,你會發現多了一個“新建項目”,用鼠標選中,窗口的狀態欄顯示:“我的選項”。用鼠標雙擊,一個Form就顯示出來,剩下的事情就不用多說了。
以上程序在Windows 95、Delphi 4.0下運行通過。