Delphi 調用控制面板設置功能

轉載自 https://www.cnblogs.com/FKdelphi/p/4654585.html

如有侵權聯繫本人刪除

應用程序運行時,有時需要對系統環境有特殊要求。例如,在Delphi數據庫應用程序中可能需要進行BDE(Borland Database Engine)或ODBC數據源名稱(DSN:Data Source Name)的設置;在網絡應用程序中可能需要進行網絡配置設置、Modem屬性設置或用戶撥號連接的帳號和密碼的設置並保存在系統中;在CTI(Computer-Telephony Integration)應用程序中可能需要進行電話撥號屬性的設置;在遊戲程序中可能需要對多媒體或遊戲控制器進行設置;等等。這時候就需要改變Windows系統的環境設置,以適應應用程序正常運行的要求。當應用程序不能自行進行環境設置時,可能需要軟件用戶來參與、協助完成設置。­

  Win9X/NT的大多數系統設置是在控制面板中進行的。我們可以要求用戶自己打開控制面板尋找相應的項目進行設置,此時要求用戶對控制面板相當熟悉;也可以在程序中自動爲用戶打開控制面板並選擇相應的項目,此時用戶所做的只是進行設置。後一種方法無疑更具有友好性,更能提高用戶的工作效率。­

 

  控制面板的大多數項目設置,都對應Windows的System目錄下的一個CPL文件,如“Internet”屬性對應的文件爲InetCpl.cpl、“多媒體”屬性對應的文件爲MmSys.cpl等。通過調用這些文件可以打開相應的屬性設置窗口,甚至可以跳到相應的屬性頁如“Internet”屬性的“連接”屬性頁,有效減少軟件用戶的操作步驟。­

 

  CPL文件的調用格式爲“RunDLL32.exe Shell32.dll,Control_RunDLL CPLFile.cpl,,ItemNo”(可參見注冊表中HKEY_CLASSES_ROOT\cplfile\shell\cplopen\command的默認值),其中CPLFile.cpl爲CPL文件,ItemNo爲項目編號。在Delphi程序中,可以用WinExec或CreateProcess函數來實現CPL文件調用,從而實現對控制面板的設置項目的調用。如進行撥號連接的帳號和密碼設置要調用“Internet”屬性的“連接”屬性頁,可以用語句“WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,3’,, SW_SHOWNORMAL);”;解決2000年問題中對兩位年份輸入的解釋要調用“區域設置”的“日期”屬性頁,可以用語句:“WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,4’,, SW_SHOWNORMAL);”。­

  控制面板各項目設置調用所對應的語句列表如下:­

 

//打開控制面板­

WinExec(’RunDLL.exe Shell32.DLL,Control_RunDLL’,SW_SHOWNORMAL);­

 

//32位ODBC數據源管理器,ODBC數據源、ODBC驅動程序設置­

//沒有提供參數區分“用戶DSN”“系統DSN”“文件DSN”“ODBC驅動程序”“跟蹤”“關於”六個屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL ODBCCP32.CPL’,SW_SHOWNORMAL);­

 

//BDE Adminstrator­

//沒有提供參數區分“Databases”和“Configuration”兩個屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL BdeAdmin.CPL’,SW_SHOWNORMAL);­

 

//Internet 屬性,可有ItemNo參數­

//“常規”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,0’, SW_SHOWNORMAL);­

//“安全”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,1’, SW_SHOWNORMAL);­

//“內容”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,2’, SW_SHOWNORMAL);­

//“連接”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,3’, SW_SHOWNORMAL);­

//“程序”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,4’, SW_SHOWNORMAL);­

//“高級”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,5’, SW_SHOWNORMAL);­

 

//電話撥號屬性,沒有提供參數區分“我的位置”和“電話語音驅動程序”兩個屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Telephon.cpl’, SW_SHOWNORMAL);­

 

//電源管理設置,沒有提供參數區分“電源方案”和“高級”兩個屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL PowerCfg.cpl’, SW_SHOWNORMAL);­

 

//調制解調器設置,沒有提供參數區分“常規”和“診斷”兩個屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Modem.cpl’, SW_SHOWNORMAL);­

 

//多媒體設置,可有ItemNo參數­

//“音頻”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,0’, SW_SHOWNORMAL);­

//“視頻”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,1’, SW_SHOWNORMAL);­

//“MIDI”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,2’, SW_SHOWNORMAL);­

//“CD音樂”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,3’, SW_SHOWNORMAL);­

//“設備”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,4’, SW_SHOWNORMAL);­

 

//輔助選項設置,可有ItemNo參數­

//“鍵盤”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,1’,SW_SHOWNORMAL);­

//“聲音”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,2’, SW_SHOWNORMAL);­

//“顯示”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,3’, SW_SHOWNORMAL);­

//“鼠標”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,4’, SW_SHOWNORMAL);­

//“常規”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,5’, SW_SHOWNORMAL);­

 

//密碼設置,沒有提供參數區分“更改密碼”和“修改用戶配置”兩個屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Password.cpl’, SW_SHOWNORMAL);­

 

//區域設置,可有ItemNo參數­

//“區域設置”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,0’, SW_SHOWNORMAL);­

//“數字”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,1’, SW_SHOWNORMAL);­

//“貨幣”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,2’, SW_SHOWNORMAL);­

//“時間”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,3’, SW_SHOWNORMAL);­

//“日期”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,4’, SW_SHOWNORMAL);­

 

//日期/時間設置,可有ItemNo參數­

//“日期和時間”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL TimeDate.cpl,,0’, SW_SHOWNORMAL);­

//“時區”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL TimeDate.cpl,,1’, SW_SHOWNORMAL);­

 

//鼠標設置,沒有提供參數區別“按鈕”、“指針”和“移動”三個屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Main.cpl’, SW_SHOWNORMAL);­

 

//添加/刪除程序設置,可有ItemNo參數­

//“安裝/卸載”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL AppWiz.cpl,,1’, SW_SHOWNORMAL);­

//“Windows安裝程序”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL AppWiz.cpl,,2’, SW_SHOWNORMAL);­

//“啓動盤”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL AppWiz.cpl,,3’, SW_SHOWNORMAL);­

 

//網絡設置,沒有提供參數區別“配置”、“標識”和“訪問控制”三個屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL NetCpl.cpl’, SW_SHOWNORMAL);­

 

//系統設置, ­

//“常規”屬性頁, 可有ItemNo參數­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,0’, SW_SHOWNORMAL);­

//“設備管理器”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,1’, SW_SHOWNORMAL);­

//“硬件配置文件”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,2’, SW_SHOWNORMAL);­

//“性能”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,3’, SW_SHOWNORMAL);­

 

//顯示設置, 可有ItemNo參數­

//“背景”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,0’, SW_SHOWNORMAL);­

//“屏幕保護程序”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,1’, SW_SHOWNORMAL);­

//“外觀”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,2’, SW_SHOWNORMAL);­

//“設置”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,3’, SW_SHOWNORMAL);­

 

//遊戲控制器設置,可有ItemNo參數­

//“一般”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Joy.cpl,,0’, SW_SHOWNORMAL);­

//“高級”屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Joy.cpl,,1’, SW_SHOWNORMAL);­

 

//掃描儀與數字相機設設置,沒有提供參數區分“設備”和“記錄設置”兩個屬性頁­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL StiCpl.cpl’, SW_SHOWNORMAL);­

 

 

 

 

控制面板大全

  在程序運行過程中啓動控制面板的各個設置功能:
var x:cardinal;
begin
{啓動控制面板}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL’,9);
{輔助選項 屬性-鍵盤}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1’,9);
{輔助選項 屬性-聲音}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2’,9);
{輔助選項 屬性-顯示}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3’,9);
{輔助選項 屬性-鼠標}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4’,9);
{輔助選項 屬性-常規}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5’,9);
{添加/刪除程序 屬性-安裝/卸載}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl,,1’,9);
{添加/刪除程序 屬性-Windows安裝程序}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl,,2’,9);
{添加/刪除程序 屬性-啓動盤}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl,,3’,9);
{顯示 屬性-背景}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0’,9);
{顯示 屬性-屏幕保護程序}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1’,9);
{顯示 屬性-外觀}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2’,9);
{顯示 屬性-設置}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3’,9);
{Internet 屬性-常規}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,0’,9);
{Internet 屬性-安全}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,1’,9);
{Internet 屬性-內容}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,2’,9);
{Internet 屬性-連接}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,3’,9);
{Internet 屬性-程序}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,4’,9);
{Internet 屬性-高級}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,5’,9);
{區域設置 屬性-區域設置}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,0’,9);
{區域設置 屬性-數字}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,1’,9);
{區域設置 屬性-貨幣}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,2’,9);
{區域設置 屬性-時間}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,3’,9);
{區域設置 屬性-日期}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,4’,9);
{遊戲控制器-一般}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Joy.cpl,,0’,9);
{遊戲控制器-高級}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Joy.cpl,,1’,9);
{鼠標 屬性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Main.cpl’,9);
{多媒體 屬性-音頻}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,0’,9);
{多媒體 屬性-視頻}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,1’,9);
{多媒體 屬性-MIDI}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,2’,9);
{多媒體 屬性-CD音樂}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,3’,9);
{多媒體 屬性-設備}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,4’,9);
{調制解調器 屬性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Modem.cpl’,9);
{網絡}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Netcpl.cpl’,9);
{密碼 屬性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Password.cpl’,9);
{掃描儀與數字相機 屬性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sticpl.cpl’,9);
{系統 屬性-常規}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,0’,9);
{系統 屬性-設備管理器}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,1’,9);
{系統 屬性-硬件配置文件}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,2’,9);
{系統 屬性-性能}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,3’,9);
{日期/時間 屬性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL timedate.cpl’,9);
{電源管理 屬性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Powercfg.cpl’,9);
{撥號屬性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Telephon.cpl’,9);
{----------------------調用錯誤----------------------}
if x=0 then messagebox(0,’程序超出內存’,’錯誤’,0);
if x=ERROR_BAD_FORMAT then messagebox(0,’該程序非一個合法的Win32.EXE程序).’,’錯誤’,0);
if x=ERROR_FILE_NOT_FOUND then messagebox(0,’指定文件沒找到’,’錯誤’,0);
if x=ERROR_PATH_NOT_FOUND then messagebox(0,’指定路徑沒找到’,’錯誤’,0);
end; 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章