当前位置: 代码迷 >> VBA >> 【调用PowerPoint的COM接口时,怎么隐藏PowerPoint窗口的弹出】[
  详细解决方案

【调用PowerPoint的COM接口时,怎么隐藏PowerPoint窗口的弹出】[

热度:9524   发布时间:2013-02-26 00:00:00.0
【调用PowerPoint的COM接口时,如何隐藏PowerPoint窗口的弹出】[
本人想通过VC调用PowerPoint的接口来操作PPT文档,一切都好,可就是解析的时候调用open函数,会弹出PowerPoint的窗口,再然后将窗口隐藏,代码:

C/C++ code
    _Application *g_app = NULL;    _Presentation *g_pPresentation;    Presentations *pPresentations = NULL;    Slides *g_pSlides;    HRESULT hr;    // COM环境初始化    hr = CoInitialize(NULL);    if (FAILED(hr))    {        return;    }    // 创建Application类,返回_Application接口    hr = CoCreateInstance(__uuidof(PowerPoint::Application),                            NULL,                            CLSCTX_LOCAL_SERVER,                            __uuidof(PowerPoint::_Application),                            (LPVOID *)&g_app);    g_app->put_Visible(msoTrue);                    // 显示Powerpoint窗口                // 此处如果不让PowerPoint窗口弹出,后面的操作都没法进行    g_app->put_WindowState(ppWindowMinimized);        // 窗口最小化    g_app->get_Presentations(&pPresentations);        // 获取Presentaions类    //打开PPT文件,返回_Presentation接口    pPresentations->Open(_bstr_t(pptPath), msoFalse, msoFalse, msoTrue, &g_pPresentation);    g_pPresentation->get_Slides(&g_pSlides);        // 获取Slides    long count = 0;    g_pSlides->get_Count(&count);    // 遍历每张Slide




g_app->put_Visible(msoTrue); // 显示Powerpoint窗口
// 此处如果不让PowerPoint窗口弹出,后面的操作都没法进行

我不知道为什么会这样,我觉得弹出来很不爽,我见过有些PPT处理软件,也打开了PowerPoint的进程,但是没见到窗口弹出,不知道是如何实现的,望各位大侠帮忙啊!感激不尽!如果有解决方案,本人再加200分

------解决方案--------------------------------------------------------
显然put_Visible、put_WindowState是多余的
------解决方案--------------------------------------------------------
探讨
显然put_Visible、put_WindowState是多余的

------解决方案--------------------------------------------------------
简单的方法是 在g_app->put_Visible(msoTrue);前用SetTimer开启一个timer事件,在里面用FindowWindow来查找PowerPoint的窗口的句柄,查找后先用KillTimer关闭timer事件,利用句柄再对此窗口用ShowWindow来进行隐藏,
------解决方案--------------------------------------------------------
探讨
引用:
你不显示参数应该这么写:
pPresentations->Open(_bstr_t(pptPath), msoFalse, msoFalse,msoFalse, &g_pPresentation);



弹出PowerPoint的窗口不是在此处,是:

g_app->put_Visible(msoTrue); // 显示Powerpoint窗口
          // 此处如果不让PowerPoint窗口弹出,后面的操作都没法进行

你说的做法是没有效果的,能帮我再看看吗?谢谢


------解决方案--------------------------------------------------------
貌似已经解决了?!

我真不敢相信居然有这么简单的解决方案,当初为了这个问题我不知道费了多少工夫……

看手册不仔细,惨痛的教训啊~~~