欲在 PowerPoint 簡報播放時觸發自訂程式碼,或反向由 MFC 程式控制 PPT 播放。兩種主要路徑:
SlideShowBegin、SlideShowNextSlide 等事件。Application、Presentation、SlideShowWindow 物件啟動/控制放映。// 1. 建立 PowerPoint Application 物件
CComPtr pptApp;
pptApp.CoCreateInstance(__uuidof(PowerPoint::Application));
// 2. 取得 Event 掛介 (EApplication)
CComPtr pEvents;
pptApp->get_Events(&pEvents);
// 3. 實作 IDispatch 介面處理事件 (需自訂類別繼承 CCmdTarget)
// 在 OnSlideShowBegin 等事件中執行自訂邏輯
優點:即時回應;缺點:實作複雜,需處理 COM 連接點與事件 Sink。
// 啟動簡報
CComPtr pptApp;
pptApp.CoCreateInstance(__uuidof(PowerPoint::Application));
pptApp->PutVisible(TRUE);
CComPtr presentations = pptApp->get_Presentations();
CComPtr pres = presentations->Open(L"C:\\Demo.pptx", TRUE, TRUE, FALSE);
// 開始放映
CComPtr sss = pres->get_SlideShowSettings();
sss->Run();
// 後續可透過 SlideShowWindow 控制下一頁、結束等
優點:程式碼直觀,易維護;缺點:無法直接攔截使用者點擊播放按鈕的動作。
若不想用 COM,可嘗試:
SendMessage / PostMessage 發送鍵盤訊息 (如 VK_F5 啟動放映)。mouse_event 或 SendInput 模擬滑鼠點擊播放按鈕座標。缺點:極不穩定,視窗位置、解析度變動皆會失效,不建議用於正式產品。
| 需求 | 推薦方案 |
|---|---|
| 需即時回應使用者在 PPT 中的操作 | COM 事件監聽 (方案一) |
| 單純由自有程式啟動/控制 PPT 播放流程 | COM 自動化控制 (方案二) |
| 快速原型、不追求穩定 | SendMessage 模擬按鍵 |
#import "msoffice.tlb" 或引用 Microsoft PowerPoint XX.0 Object Library。AddRef/Release 或使用智慧指標 (CComPtr) 防止記憶體洩漏。