初始化環境與 COM 物件
#include
#include
CoInitialize(NULL); // 初始化 COM 程式庫
Variant vShellOLE = Variant::CreateObject("Shell.Application"); // 建立 Shell 物件
視窗管理操作
| 功能 | 方法呼叫 | 說明 |
| 層疊視窗 | vShellOLE.Exec(CascadeWindows("CascadeWindows")) | 將所有開啟視窗層疊顯示 |
| 橫向平鋪 | vShellOLE.Exec(TileHorizontally("TileHorizontally")) | 視窗水平分割平鋪 |
| 縱向平鋪 | vShellOLE.Exec(TileVertically("TileVertically")) | 視窗垂直分割平鋪 |
| 最小化全部 | vShellOLE.Exec(MinimizeAll("MinimizeAll")) | 最小化所有視窗 |
| 撤銷最小化 | vShellOLE.Exec(UndoMinimizeALL("UndoMinimizeALL")) | 還原最小化前狀態 |
系統控制功能
| 功能 | 程式碼範例 | 備註 |
| 設定系統時間 | vShellOLE.Exec(SetTime("SetTime")) | 彈出時間屬性對話框 |
| 查找電腦 | vShellOLE.Exec(FindComputer("FindComputer")) | 開啟網路尋找電腦對話框 |
| 查找檔案 | vShellOLE.Exec(FindFiles("FindFiles")) | 開啟檔案搜尋對話框 |
| Windows 說明 | vShellOLE.Exec(Help("Help")) | 開啟系統說明 |
| 執行命令 | vShellOLE.Exec(FileRun("FileRun")) | 開啟「執行」對話框 |
| 工作列屬性 | vShellOLE.Exec(TrayProperties("TrayProperties")) | 開啟工作列與開始選單屬性 |
| 系統待機 | vShellOLE.Exec(Suspend("Suspend")) | 進入待機/休眠模式 |
| 關閉 Windows | vShellOLE.Exec(ShutdownWindows("ShutdownWindows")) | 顯示關機對話框 |
資源管理器操作
瀏覽資料夾對話框
// 系統特殊資料夾常數陣列
int SpecFolder[17] = {
ssfDESKTOP, ssfPROGRAMS, ssfCONTROLS, ssfPRINTERS, ssfPERSONAL, ssfFAVORITES,
ssfSTARTUP, ssfRECENT, ssfSENDTO, ssfBITBUCKET, ssfSTARTMENU, ssfDESKTOPDIRECTORY,
ssfDRIVES, ssfNETWORK, ssfNETHOOD, ssfFONTS, ssfTEMPLATES
};
Function BrowseForFolder("BrowseForFolder");
Variant ppsdf;
int nIndex = 2; // ssfCONTROLS (控制台)
// 以系統特殊資料夾為根目錄
ppsdf = vShellOLE.Exec(BrowseForFolder << short(Handle) << "BrowseForFolder method"
<< BIF_BROWSEINCLUDEFILES << Variant(SpecFolder[nIndex]));
// 以指定路徑為根目錄
String strPath("C:\\123");
ppsdf = vShellOLE.Exec(BrowseForFolder << short(Handle) << "BrowseForFolder method"
<< BIF_BROWSEINCLUDEFILES << Variant(strPath));
開啟資源管理器瀏覽指定目錄
Function Explore("Explore");
// 瀏覽系統特殊目錄
vShellOLE.Exec(Explore << Variant(SpecFolder[nIndex]));
// 瀏覽指定磁碟目錄
String strPath("C:\\123");
vShellOLE.Exec(Explore << Variant(strPath));
啟動控制台項目
Function ControlPanelItem("ControlPanelItem");
String strCplFile("D:\\Winnt\\System32\\appwiz.cpl"); // 新增/移除程式
BSTR FPath = TStringConverter::AnsiToOLESTR(strCplFile.c_str());
vShellOLE.Exec(ControlPanelItem << FPath);
資源釋放
vShellOLE = Unassigned; // 釋放 Shell 物件
CoUninitialize(); // 釋放 COM 程式庫
應用場景
此技術適用於系統管理工具、自動化測試腳本、桌面增強軟體等需要程式化控制 Windows Shell 行為的場合。透過 Shell.Application 介面,可避免直接呼叫複雜的 Shell API,大幅簡化開發難度。