我在这里看过很多关于这个主题的帖子,但似乎没有人直接回答这个问题。我想控制在第二台显示器上运行的两个Powerpoint实例。
理想的解决方案如下:
PowerPoint.Application PPTViewer1 = new PowerPoint.Application();
PowerPoint.Application PPTViewer2 = new PowerPoint.Application();
我可以手动执行此操作,只需启动PowerPoint的两个实例,加载演示文稿,然后从每个实例启动幻灯片放映。我可以手动在两个幻灯片放映之间来回切换,每个幻灯片按预期放到前面。
那么......我如何使用VSTO和C#以编程方式执行此操作?像我之前的其他人一样,我看到Interop.PowerPoint接口将只创建单个实例。如果不是这样,那么我可以很容易地实现我正在寻找的结果。
此外,我不是在为此任务寻找第三方组件。
感谢任何帮助。
提前致谢。
答案 0 :(得分:1)
您可能看起来正在运行多个Powerpoint实例,但事实并非如此。它只允许自己的一个实例。如果在任务列表中看到两个Powerpnt.exe实例,有时会发生这种情况,这意味着出现了问题,并在内存中留下了一个僵尸。
答案 1 :(得分:0)
可能不完全理想,但here is a reference建议以不同的用户身份启动实例(请注意,此站点适用于PowerPoint 2007)。
runas /user:username "C:\Program Files\Microsoft Office\Office12\POWER PNT.EXE"
答案 2 :(得分:0)
Powerpoint COM对象的每个实例共享相同的全屏显示窗口。我知道没有办法切换哪个演示文稿有那个窗口
解决方案是在您自己的窗口中托管Powerpoint显示器
因此,您可以缩放窗口并在一台显示器上显示多个演示文稿,或将其从一台显示器移动到另一台显示器?
e.g。
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);