首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否阻止子进程创建可见窗口?

是否阻止子进程创建可见窗口?
EN

Stack Overflow用户
提问于 2011-02-24 22:22:32
回答 2查看 1.3K关注 0票数 5

我正在尝试使用办公自动化(PIA)将一些.pptx文档转换为其他一些格式。然而,即使主窗口被隐藏,PowerPoint仍坚持显示进度条。

有没有什么办法可以阻止PowerPoint在主桌面上显示任何窗口?

额外信息:

我主要使用C#,COM PIA来实现Office interop。但我不怕深入研究C++ :P

我使用PIA启动PowerPoint,如下所示

代码语言:javascript
复制
var app = new PowerPoint.Application();
var ppt = app.Presentations.Open("my.pptx");

// This line will show a progress dialog
ppt.SaveAs("out.pdf",
    PowerPoint.PpSaveAsFileType.ppSaveAsPDF,
    MsoTriState.msoTrue);

app.Quit();
EN

回答 2

Stack Overflow用户

发布于 2011-02-24 23:06:51

在调用powerpoint进程之前,您可以使用CreateDesktop调用来创建备用桌面。这将确保powerpoint创建的窗口不可见。然而,这里有一些警告:

  • 您需要在一个备用线程中执行此操作;您不希望更改主GUI线程上的桌面
  • 最好是在具有备用桌面的专用线程上初始化powerpoint一次,并将其保留在该线程上,直到您终止。这可确保它不会被从多个桌面调用而混淆。
  • 如果powerpoint弹出任何类型的对话框,用户将无法回答,除非您将它们切换到备用桌面与powerpoint进行交互。
  • 如果powerpoint是进程外服务器,则可能会发生不好的事情(powerpoint加载到备用桌面,然后用户尝试手动打开powerpoint,此时powerpoint的主用户界面加载到不可见的备用桌面上)。这可能是您需要仔细测试的东西。creating an alternate Window Station也可以避免这个问题,但由于窗口工作站是进程全局的,在这种情况下,您需要派生一个帮助器子进程来处理与powerpoint的交互。

您还可以尝试使用Windows Message Hook来确定窗口的创建时间并使其不可见。这也有一些警告:

  • 你必须找到一些可靠的方法来识别感兴趣的窗口(窗口类名?)
  • 如果powerpoint是一个进程外的服务器,就会有一个窗口,在这个窗口中你的钩子是活动的,并且可能隐藏错误的进度对话框(即,一个属于另一个进程)。要将这种可能性降至最低,请测试powerpoint是否正在运行(在这种情况下,将挂钩编程为只影响您自己的进程),如果不是,则将挂钩安排为仅在必要的最短时间内处于活动状态,以抑制window.
  • Future powerpoint发布的进度可能会破坏您用来标识感兴趣窗口的任何方法。对于这个问题,你几乎无能为力。
票数 3
EN

Stack Overflow用户

发布于 2018-11-28 16:43:17

您可以尝试保留Application.Visible属性的默认值,并在打开演示文稿时将MsoTriState.msoFalse传递给WithWindow参数:

代码语言:javascript
复制
var application = new Application();
var document = application.Presentations.Open(fileName, MsoTriState.msoFalse, MsoTriState.msoFalse, 
    WithWindow: MsoTriState.msoFalse);

如果将Application.Visible属性显式设置为MsoTriState.msoFalse,则会出现“不允许隐藏应用程序窗口”错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5105869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档