Powerpoint 2010 多个实例
本文关键字:实例 2010 Powerpoint | 更新日期: 2023-09-27 18:36:33
我在这里看到了很多关于这个主题的帖子,但似乎没有一篇直接回答这个问题。我想控制在第二台显示器上运行的两个 Powerpoint 实例。
理想的解决方案如下所示:
PowerPoint.Application PPTViewer1 = new PowerPoint.Application();
PowerPoint.Application PPTViewer2 = new PowerPoint.Application();
我可以手动执行此操作,只需启动两个 PowerPoint 实例,加载演示文稿,然后从每个实例启动幻灯片放映即可。我可以手动在两个幻灯片之间来回切换,每个幻灯片放映都按预期显示在前面。
那么......如何使用 VSTO 和 C# 以编程方式执行此操作?像我之前的其他人一样,我看到Interop.PowerPoint界面将只创建单个实例。如果不是这样,那么我可以很容易地实现我想要的结果。
此外,我不是在为此任务寻找第三方组件。
任何帮助,不胜感激。
提前谢谢。
您可能正在运行多个 Powerpoint 实例,但事实并非如此。 它只允许自身的一个实例。 如果您在任务列表中看到两个 Powerpnt 实例.exe就像有时会发生的那样,这意味着出了点问题并在内存中留下了僵尸。
可能并不完全理想,但这里有一个参考,建议以其他用户身份启动实例(请注意,此站点适用于 PowerPoint 2007)。
runas /user:username "C:'Program Files'Microsoft Office'Office12'POWER PNT.EXE"
Powerpoint COM 对象的每个实例共享相同的全屏显示窗口。我知道没有方法可以切换哪个演示文稿具有该窗口
解决方案是在您自己的窗口中托管Powerpoint显示器
因此,这允许您缩放窗口并在一台显示器上显示多个演示文稿,还是将其从一个显示器移动到另一个显示器?
例如
var display1 = new FullScreenDisplay(); // A form with BorderStyle = None
display1.Show();
application1 = new PowerPoint.Application();
presentation1 = application1.Presentations.Open2007(....);
var slideShowSettings1 = presentation1.SlideShowSettings;
slideShowSettings1.ShowType = PowerPoint.PpSlideShowType.ppShowTypeSpeaker;
var slideShowWindow1 = slideShowSettings1.Run();
IntPtr hwnd1 = (IntPtr)slideShowWindow1.HWND;
SetParent(hwnd1, display1.Handle);
var display2 = new FullScreenDisplay();
display2.Show();
application2 = new PowerPoint.Application();
presentation2 = application2.Presentations.Open2007(....);
var slideShowSettings2 = presentation2.SlideShowSettings;
slideShowSettings2.ShowType = PowerPoint.PpSlideShowType.ppShowTypeSpeaker;
var slideShowWindow2 = slideShowSettings2.Run();
IntPtr hwnd2 = (IntPtr)slideShowWindow2.HWND;
SetParent(hwnd2, display2.Handle);
display1.BringToFront(); // to show slideshow 1
// or
display2.BringToFront(); // to show slideshow 2
// To advance a slide
presentation1.SlideShowWindow.View.Next();
// or
presentation2.SlideShowWindow.View.Next();
// To exit, note order!
presentation2.SlideShowWindow.View.Exit();
presentation1.SlideShowWindow.View.Exit();
Application.Exit();
这是一个黑客,可能不适用于未来版本的Powerpoint?
您还需要此导入
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);