如題,需要先打開一個PPT檔案,注意:這里只是單純的打開而并沒有播放,打開之后如何用COM控制PPT的播放和翻頁呢?
uj5u.com熱心網友回復:
如果是使用com打開PPT檔案的話是可以操作的,這個我已經實作了;現在的情況是要先手動打開PPT檔案,然后控制ppt的播放,翻頁和退出等,求解uj5u.com熱心網友回復:
在PowerPoint 2003中開始記錄宏,手動完成所需功能,結束記錄宏,按Alt+F11鍵,查看剛才記錄的宏對應的VBA代碼。uj5u.com熱心網友回復:
@趙4老師 現在的要求是office2013,跟c++;我剛剛看了2013,沒有找到有錄制宏這個功能uj5u.com熱心網友回復:
我也沒說過office2007及以上版本還保留有錄制宏這個功能啊。
(微軟可恥地將這個功能和諧了!)
剛好我電腦上還保(zhen)留(cang)有PowerPoint 2003,就受累幫你錄制并看對應VBA代碼且貼上來:
Sub Macro1()
'
' 宏由 [email protected] 記錄,日期: 2016-01-27
'
With ActivePresentation.SlideShowSettings
.ShowType = ppShowTypeSpeaker
.LoopUntilStopped = msoFalse
.ShowWithNarration = msoFalse
.ShowWithAnimation = msoTrue
.RangeType = ppShowAll
.AdvanceMode = ppSlideShowUseSlideTimings
.PointerColor.RGB = RGB(Red:=255, Green:=0, Blue:=0)
.Run
End With
SlideShowWindows(Index:=1).View.Next
SlideShowWindows(Index:=1).View.Next
SlideShowWindows(Index:=1).View.Next
SlideShowWindows(Index:=1).View.Exit
ActiveWindow.View.GotoSlide Index:=4
End Sub
uj5u.com熱心網友回復:
@趙4老師 事情是這樣的,我們公司之前讓我做了一個PPT轉圖片的程式,把圖片播放出來,但是后來提出了新的需求要求有影片,無奈使用MFC的SetParent直接把ppt程式嵌入進入,但是在組合其他程式是發生bug太多,有些bug幾乎短時間無法解決;遂換其他方案,現采用的是dsoframer來打開ppt,但是卻無法控制ppt的播放和翻頁,想通過com去控制ppt的播放和翻頁,查閱相當多的資料都是先用com打開再控制,無法先手動打開再使用com控制。。。。。。后自己意淫,終于達到控制,但無法在ocx中播放,果斷放棄。。。在尋找其他方案中。。。--------------------分割線---------------------
2013確實沒有找到錄制宏的工具,但是還是有創建宏的工具,但是只能創建應用本檔案的宏
不過還是要謝謝趙老師的解答
uj5u.com熱心網友回復:
樓主能分享使用com打開PPT檔案的代碼嗎?uj5u.com熱心網友回復:
僅供參考:// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Visual C++ Language Reference and related
// electronic documentation provided with Microsoft Visual C++.
// See these sources for detailed information regarding the
// Microsoft Visual C++ product.
// NOTE: This example will only work with Excel8 in Office97
// Compile with cl /GX comexcel.cpp
// TO DO: Edit the #import paths
//#pragma message ("Make sure you go to Tools.Options.Directories and add the paths to mso97.dll and vbeext1.olb. Mso97.dll will usually be in c:\\\"Program Files\"\\\"Microsoft Office\"\\Office, and vbeext1.olb will be in c:\\\"Program Files\"\\\"Common Files\"\\\"Microsoft Shared\"\\VBA")
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\Office11\\mso.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesXL")
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\VBA6\\VBE6EXT.OLB" no_namespace
#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\excel.exe" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces
#pragma warning (disable:4192 4146)
#include <stdio.h>
#include <tchar.h>
void dump_com_error(_com_error &e)
{
_tprintf(_T("Oops - hit an error!\n"));
_tprintf(_T("\a\tCode = %08lx\n"), e.Error());
_tprintf(_T("\a\tCode meaning = %s\n"), e.ErrorMessage());
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
_tprintf(_T("\a\tSource = %s\n"), (LPCTSTR) bstrSource);
_tprintf(_T("\a\tDescription = %s\n"), (LPCTSTR) bstrDescription);
}
// If this is placed in the scope of the smart pointers, they must be
// explicitly Release(d) before CoUninitialize() is called. If any reference
// count is non-zero, a protection fault will occur.
struct StartOle
{
StartOle() { CoInitialize(NULL); }
~StartOle() { CoUninitialize(); }
} _inst_StartOle;
void main()
{
using namespace Excel;
_ApplicationPtr pXL;
try
{
pXL.CreateInstance(L"Excel.Application");
pXL->Visible = VARIANT_TRUE;
WorkbooksPtr pBooks = pXL->Workbooks;
_WorkbookPtr pBook = pBooks->Add((long)xlWorksheet);
_WorksheetPtr pSheet = pXL->ActiveSheet;
RangePtr pRange;
pRange = pSheet->Range["A21"];
pRange->Value2 = 75L;
//pRange->NumberFormatLocal = "@";
_CommandBarsPtr pCmdbars = pXL->CommandBars;
int iCmdbars = pCmdbars->GetCount();
Sleep(1000);
pRange = pSheet->Range["20:20"];
pRange->Insert( (long)Excel::xlDown );
pRange->Merge();
Sleep(1000);
pBook->Saved = VARIANT_TRUE;
pXL->Quit();
}
catch(_com_error &e)
{
dump_com_error(e);
pXL->Quit();
}
}
uj5u.com熱心網友回復:
請問樓主現在搞定了嗎?我也遇到同樣的需求,先打開PPT再用COM去控制,看到有個seewo軟體已經做到了,不知道怎么實作的,如果樓主實作了麻煩賜教啊!uj5u.com熱心網友回復:
現在的情況是要先手動打開PPT檔案這個用ShellExecute不就可以打開PPT檔案嗎?
然后控制ppt的播放,翻頁和退出等,求解
這個發送鍵盤訊息到PPT不就可以控制了嗎?發送上下左右
uj5u.com熱心網友回復:
搜“后臺呼叫外部程式的完美實作(使用CreateDesktop建立隱藏桌面)”?uj5u.com熱心網友回復:
兩種方式:1.把檔案關聯ppt改成啟動你的程式,你內部創建出來,就都有他的介面了。
2.add-in方式,然后和你的exe行程間通訊。
顯示提供一個簡單的方式,創建一個與ppt視窗等大的透明視窗,加上個多媒體控制面板即可。
uj5u.com熱心網友回復:
樓主這個問題解決了嗎?我通過dsoframer配合Microsoft.office.interpro.powerpoint可以實作控制翻頁,但是需要安裝.net framework;
我希望不需要安裝.net framwork,直接通過com播放翻頁,沒找到方法,頭大。。。。
uj5u.com熱心網友回復:

翻頁? 你確定要自動控制? 你萬一講的進度慢了,提前翻頁了怎么辦?
還是搞個無線滑鼠什么的,藍牙迷你鍵鼠一體,像個遙控器的。隨便控制ppt
uj5u.com熱心網友回復:
樓主最后怎么通過com控制ppt播放的?
uj5u.com熱心網友回復:
請問用VB怎么實作PPT翻頁的功能uj5u.com熱心網友回復:
模擬滑鼠單擊吧。直接先把視窗句柄找到,然后把滑鼠的位置挪過去,模擬點擊。用全域的鍵盤鉤子也可以。
uj5u.com熱心網友回復:
請問這個宏的功能是什么呢
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/69985.html
