首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 呼叫控制面板項目完整指南:RunDLL 命令大全

     編輯:Delphi

核心原理

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.cpl1OpenControlPanel('access.cpl', 1);
輔助選項-聲音access.cpl2OpenControlPanel('access.cpl', 2);
輔助選項-顯示access.cpl3OpenControlPanel('access.cpl', 3);
輔助選項-滑鼠access.cpl4OpenControlPanel('access.cpl', 4);
輔助選項-常規access.cpl5OpenControlPanel('access.cpl', 5);
新增/移除程式-安裝/解除安裝appwiz.cpl1OpenControlPanel('appwiz.cpl', 1);
新增/移除程式-Windows 元件appwiz.cpl2OpenControlPanel('appwiz.cpl', 2);
顯示-桌面desk.cpl0OpenControlPanel('desk.cpl', 0);
顯示-螢幕保護程式desk.cpl1OpenControlPanel('desk.cpl', 1);
顯示-外觀desk.cpl2OpenControlPanel('desk.cpl', 2);
顯示-設定desk.cpl3OpenControlPanel('desk.cpl', 3);
Internet 選項-常規inetcpl.cpl0OpenControlPanel('inetcpl.cpl', 0);
Internet 選項-安全性inetcpl.cpl1OpenControlPanel('inetcpl.cpl', 1);
Internet 選項-內容inetcpl.cpl2OpenControlPanel('inetcpl.cpl', 2);
Internet 選項-連線inetcpl.cpl3OpenControlPanel('inetcpl.cpl', 3);
Internet 選項-程式inetcpl.cpl4OpenControlPanel('inetcpl.cpl', 4);
Internet 選項-進階inetcpl.cpl5OpenControlPanel('inetcpl.cpl', 5);
地區選項-地區設定intl.cpl0OpenControlPanel('intl.cpl', 0);
遊戲控制器joy.cpl0OpenControlPanel('joy.cpl', 0);
滑鼠屬性main.cpl-OpenControlPanel('main.cpl');
多媒體-音訊mmsys.cpl0OpenControlPanel('mmsys.cpl', 0);
多媒體-視訊mmsys.cpl1OpenControlPanel('mmsys.cpl', 1);
多媒體-MIDImmsys.cpl2OpenControlPanel('mmsys.cpl', 2);
多媒體-CD 音樂mmsys.cpl3OpenControlPanel('mmsys.cpl', 3);
多媒體-裝置mmsys.cpl4OpenControlPanel('mmsys.cpl', 4);
調制解調器modem.cpl-OpenControlPanel('modem.cpl');
網路netcpl.cpl-OpenControlPanel('netcpl.cpl');
密碼password.cpl-OpenControlPanel('password.cpl');
掃描儀與相機sticpl.cpl-OpenControlPanel('sticpl.cpl');
系統-常規sysdm.cpl0OpenControlPanel('sysdm.cpl', 0);
系統-裝置管理員sysdm.cpl1OpenControlPanel('sysdm.cpl', 1);
系統-硬體設定檔sysdm.cpl2OpenControlPanel('sysdm.cpl', 2);
系統-效能sysdm.cpl3OpenControlPanel('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;

注意事項

  • 分頁索引從 0 開始;部分 .cpl 不支援分頁參數,直接呼叫無索引版本。
  • Windows 版本差異可能導致某些 .cpl 檔名或分頁索引不同,建議實測後再部署。
  • 需在 uses 加入 ShellAPI。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved