C++ 使用COM如何控制已经打开的PPT文件播放、翻页?

阿小步 2016-01-27 11:49:43
如题,需要先打开一个PPT文件,注意:这里只是单纯的打开而并没有播放,打开之后如何用COM控制PPT的播放和翻页呢?
...全文
4350 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31858411 2018-05-12
  • 打赏
  • 举报
回复
引用 4 楼 赵4老师的回复:
[quote=引用 3 楼 u010380485 的回复:] @赵4老师 现在的要求是office2013,跟c++;我刚刚看了2013,没有找到有录制宏这个功能
我也没说过office2007及以上版本还保留有录制宏这个功能啊。 (微软可耻地将这个功能和谐了!) 刚好我电脑上还保(zhen)留(cang)有PowerPoint 2003,就受累帮你录制并看对应VBA代码且贴上来:
Sub Macro1()
'
' 宏由 Zhao4Zhong1@163.com 记录,日期: 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
[/quote] 请问这个宏的功能是什么呢
丁劲犇 2018-05-09
  • 打赏
  • 举报
回复
模拟鼠标单击吧。直接先把窗口句柄找到,然后把鼠标的位置挪过去,模拟点击。
用全局的键盘钩子也可以。
qq_31858411 2018-05-08
  • 打赏
  • 举报
回复
请问用VB怎么实现PPT翻页的功能
PepperEggFriedRice 2018-04-23
  • 打赏
  • 举报
回复
楼主最后怎么通过com控制ppt播放的?
smwhotjay 2017-11-28
  • 打赏
  • 举报
回复
翻页? 你确定要自动控制? 你万一讲的进度慢了,提前翻页了怎么办? 还是搞个无线鼠标什么的,蓝牙迷你键鼠一体,像个遥控器的。随便控制ppt
simen-wang 2017-11-27
  • 打赏
  • 举报
回复
楼主这个问题解决了吗? 我通过dsoframer配合Microsoft.office.interpro.powerpoint可以实现控制翻页,但是需要安装.net framework; 我希望不需要安装.net framwork,直接通过com播放翻页,没找到方法,头大。。。。
许文君 2017-04-24
  • 打赏
  • 举报
回复
两种方式: 1.把文件关联ppt改成启动你的程序,你内部创建出来,就都有他的接口了。 2.add-in方式,然后和你的exe进程间通讯。 显示提供一个简单的方式,创建一个与ppt窗口等大的透明窗口,加上个多媒体控制面板即可。
赵4老师 2017-04-18
  • 打赏
  • 举报
回复
搜“后台调用外部程序的完美实现(使用CreateDesktop建立隐藏桌面)”?
叶恭介叶恭介 2017-04-17
  • 打赏
  • 举报
回复
现在的情况是要先手动打开PPT文件 这个用ShellExecute不就可以打开PPT文件吗? 然后控制ppt的播放,翻页和退出等,求解 这个发送键盘消息到PPT不就可以控制了吗?发送上下左右
kakasalad 2017-04-17
  • 打赏
  • 举报
回复
请问楼主现在搞定了吗?我也遇到同样的需求,先打开PPT再用COM去控制,看到有个seewo软件已经做到了,不知道怎么实现的,如果楼主实现了麻烦赐教啊!
赵4老师 2016-09-01
  • 打赏
  • 举报
回复
仅供参考:
// 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();
    }
}


tuzhaoting 2016-08-31
  • 打赏
  • 举报
回复
楼主能分享使用com打开PPT文件的代码吗?
赵4老师 2016-01-27
  • 打赏
  • 举报
回复
在PowerPoint 2003中开始记录宏,手动完成所需功能,结束记录宏,按Alt+F11键,查看刚才记录的宏对应的VBA代码。
阿小步 2016-01-27
  • 打赏
  • 举报
回复
如果是使用com打开PPT文件的话是可以操作的,这个我已经实现了;现在的情况是要先手动打开PPT文件,然后控制ppt的播放,翻页和退出等,求解
阿小步 2016-01-27
  • 打赏
  • 举报
回复
@赵4老师 事情是这样的,我们公司之前让我做了一个PPT转图片的程序,把图片播放出来,但是后来提出了新的需求要求有动画,无奈使用MFC的SetParent直接把ppt程序嵌入进入,但是在组合其他程序是发生bug太多,有些bug几乎短时间无法解决;遂换其他方案,现采用的是dsoframer来打开ppt,但是却无法控制ppt的播放和翻页,想通过com去控制ppt的播放和翻页,查阅相当多的资料都是先用com打开再控制,无法先手动打开再使用com控制。。。。。。后自己意淫,终于达到控制,但无法在ocx中播放,果断放弃。。。在寻找其他方案中。。。 --------------------分割线--------------------- 2013确实没有找到录制宏的工具,但是还是有创建宏的工具,但是只能创建应用本文档的宏 不过还是要谢谢赵老师的解答
赵4老师 2016-01-27
  • 打赏
  • 举报
回复
引用 3 楼 u010380485 的回复:
@赵4老师 现在的要求是office2013,跟c++;我刚刚看了2013,没有找到有录制宏这个功能
我也没说过office2007及以上版本还保留有录制宏这个功能啊。 (微软可耻地将这个功能和谐了!) 刚好我电脑上还保(zhen)留(cang)有PowerPoint 2003,就受累帮你录制并看对应VBA代码且贴上来:
Sub Macro1()
'
' 宏由 Zhao4Zhong1@163.com 记录,日期: 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
阿小步 2016-01-27
  • 打赏
  • 举报
回复
@赵4老师 现在的要求是office2013,跟c++;我刚刚看了2013,没有找到有录制宏这个功能

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧