2010-03-06 106 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人員完成。