Windows 控制面板各項目皆為 .cpl 擴充檔,透過 rundll32.exe shell32.dll,Control_RunDLL 呼叫並指定分頁索引即可直接開啟特定設定頁籤。
uses ShellAPI;
procedure OpenControlPanel(const CPLFile: string; TabIndex: Integer = -1);
var
Cmd: string;
begin
if TabIndex >= 0 then
Cmd := Format('shell32.dll,Control_RunDLL %s,,%d', [CPLFile, TabIndex])
else
Cmd := Format('shell32.dll,Control_RunDLL %s', [CPLFile]);
ShellExecute(0, 'open', 'rundll32.exe', PChar(Cmd), nil, SW_SHOWNORMAL);
end;
| 功能 | CPL 檔案 | 分頁索引 | 呼叫範例 |
|---|---|---|---|
| 輔助選項-鍵盤 | access.cpl | 1 | OpenControlPanel('access.cpl', 1); |
| 輔助選項-聲音 | access.cpl | 2 | OpenControlPanel('access.cpl', 2); |
| 輔助選項-顯示 | access.cpl | 3 | OpenControlPanel('access.cpl', 3); |
| 輔助選項-滑鼠 | access.cpl | 4 | OpenControlPanel('access.cpl', 4); |
| 輔助選項-常規 | access.cpl | 5 | OpenControlPanel('access.cpl', 5); |
| 新增/移除程式-安裝/解除安裝 | appwiz.cpl | 1 | OpenControlPanel('appwiz.cpl', 1); |
| 新增/移除程式-Windows 元件 | appwiz.cpl | 2 | OpenControlPanel('appwiz.cpl', 2); |
| 顯示-桌面 | desk.cpl | 0 | OpenControlPanel('desk.cpl', 0); |
| 顯示-螢幕保護程式 | desk.cpl | 1 | OpenControlPanel('desk.cpl', 1); |
| 顯示-外觀 | desk.cpl | 2 | OpenControlPanel('desk.cpl', 2); |
| 顯示-設定 | desk.cpl | 3 | OpenControlPanel('desk.cpl', 3); |
| Internet 選項-常規 | inetcpl.cpl | 0 | OpenControlPanel('inetcpl.cpl', 0); |
| Internet 選項-安全性 | inetcpl.cpl | 1 | OpenControlPanel('inetcpl.cpl', 1); |
| Internet 選項-內容 | inetcpl.cpl | 2 | OpenControlPanel('inetcpl.cpl', 2); |
| Internet 選項-連線 | inetcpl.cpl | 3 | OpenControlPanel('inetcpl.cpl', 3); |
| Internet 選項-程式 | inetcpl.cpl | 4 | OpenControlPanel('inetcpl.cpl', 4); |
| Internet 選項-進階 | inetcpl.cpl | 5 | OpenControlPanel('inetcpl.cpl', 5); |
| 地區選項-地區設定 | intl.cpl | 0 | OpenControlPanel('intl.cpl', 0); |
| 遊戲控制器 | joy.cpl | 0 | OpenControlPanel('joy.cpl', 0); |
| 滑鼠屬性 | main.cpl | - | OpenControlPanel('main.cpl'); |
| 多媒體-音訊 | mmsys.cpl | 0 | OpenControlPanel('mmsys.cpl', 0); |
| 多媒體-視訊 | mmsys.cpl | 1 | OpenControlPanel('mmsys.cpl', 1); |
| 多媒體-MIDI | mmsys.cpl | 2 | OpenControlPanel('mmsys.cpl', 2); |
| 多媒體-CD 音樂 | mmsys.cpl | 3 | OpenControlPanel('mmsys.cpl', 3); |
| 多媒體-裝置 | mmsys.cpl | 4 | OpenControlPanel('mmsys.cpl', 4); |
| 調制解調器 | modem.cpl | - | OpenControlPanel('modem.cpl'); |
| 網路 | netcpl.cpl | - | OpenControlPanel('netcpl.cpl'); |
| 密碼 | password.cpl | - | OpenControlPanel('password.cpl'); |
| 掃描儀與相機 | sticpl.cpl | - | OpenControlPanel('sticpl.cpl'); |
| 系統-常規 | sysdm.cpl | 0 | OpenControlPanel('sysdm.cpl', 0); |
| 系統-裝置管理員 | sysdm.cpl | 1 | OpenControlPanel('sysdm.cpl', 1); |
| 系統-硬體設定檔 | sysdm.cpl | 2 | OpenControlPanel('sysdm.cpl', 2); |
| 系統-效能 | sysdm.cpl | 3 | OpenControlPanel('sysdm.cpl', 3); |
| 日期/時間 | timedate.cpl | - | OpenControlPanel('timedate.cpl'); |
| 電源管理 | powercfg.cpl | - | OpenControlPanel('powercfg.cpl'); |
| 撥號設定 | telephon.cpl | - | OpenControlPanel('telephon.cpl'); |
ShellExecute 回傳值 > 32 表示成功;否則可檢查錯誤碼:
var
Ret: HINST;
begin
Ret := ShellExecute(...);
if Ret <= 32 then
case Ret of
0: ShowMessage('記憶體不足');
ERROR_FILE_NOT_FOUND: ShowMessage('找不到指定檔案');
ERROR_PATH_NOT_FOUND: ShowMessage('找不到指定路徑');
ERROR_BAD_FORMAT: ShowMessage('非有效的 Win32 應用程式');
else
ShowMessage('無法開啟控制面板項目,錯誤碼: ' + IntToStr(Ret));
end;
end;
uses 加入 ShellAPI。