2010-03-06 83 views
5

我正在开发一个需要使用C#.net中的PowerPoint的项目。最初,我总是创建一个单一的实例。截至今天,我想有多个实例运行。我这样做,像这样:无法创建多个PowerPoint实例

Type powerpointType = Type.GetTypeFromProgID("PowerPoint.Application"); 

object instance1 = Activator.CreateInstance(powerpointType); 
object instance2 = Activator.CreateInstance(powerpointType); 

但是当我问两个实例的句柄,通过调用

hwnd = (int)powerpointType.GetProperty("HWND").GetValue(instance1, null); 

然后我得到同样的处理两倍。我的结论是,应用程序只启动一次,TaskManager确认:只有一个进程。

怎么只有一个PowerPoint运行的实例,我该如何使它工作?

回答

4

而不是多个实例,为什么不引用单个实例中的多个打开的演示文稿?

当用户“退出列”时,您可以关闭该演示文稿,但保持PPT处于打开状态,除非它是最后打开的演示文稿。

2

PowerPoint以及Word共享相同的实例。 Excel另一方面可以让你有多个实例。为了让两个实例运行,您需要以另一个用户身份启动另一个实例。

为什么你需要多个实例?为了在两台显示器上显示两个演示文稿?

+0

我正在撰写的应用程序(包括很多其他内容)用于呈现PowerPoint演示文稿。如果您将演示文稿添加到某一列(某种工作区域),则该列应该填充ppt幻灯片的缩略图。因为我需要PowerPoint。之后,可以提供ppt。这也启动PowerPoint。这些事情应该能够同时发生,你应该能够打开一个PPT,同时也可以用一个PPT退出另一列。 – Excel20

+1

我想你需要在不同的用户下运行两个实例,或者使用Office 2010(测试版)中的PowerPoint,它应该可以在多个窗口中工作。 –

+1

@MikaelSvenson Powerpoint共享1个实例,Word和Excel不共享1个实例。 – Paul

1

根据您对Mikael的评论,还有另一种解决方案。这是VBA,但可以轻松移植到C#。只需打开演示文稿(隐藏)并将每张幻灯片导出为PNG格式。然后,您可以将这些PNG显示在您的列中。

Dim ap As Presentation 
Set ap = Presentations.Open(FileName:="yourppt.pptx", WithWindow:=msoFalse) 
Dim s As Slide 
For Each s In ap.Slides 
    s.Export s.Name, "PNG" 
Next 

然后,当有人点击的东西,第一个可以关闭和新的PPT可以显示。

+0

我已经在列中使用了这种技术,但它不足以显示,因为它忽略了幻灯片上的动画,而只显示了第一个/最后一个状态。 – Excel20

+0

@ Excel20:是的,这是意图 - 你可以有一个轻量级的方式显示列中的幻灯片,然后你可以加载你的套牌。 –

4

This link讨论了如何使用新的用户帐户来创建多个PowerPoint实例。如果你总是从同一台计算机上运行它,它工作得很好,但不是特别容易分发。

+0

这不会是可取的,因为该应用将分布在数百个用户中,可能具有低到没有计算机技能。 – Excel20

-1

对于2007用户一个PPT(X)保存为PDF

至少PDF可以打开作为单独的实例

可以救回来的.DOC(我的Acrobat Pro的版本是9.5.2 ); .doc是好的但并不完美,但至少我可以在.doc和.ppt(x)之间剪切和粘贴:-)

顺便说一句 - Word 2007确实将每个文档作为单独的实例打开,至少在我的安装中,安装由我们的IT人员完成。