2010-03-06 3 views
5

Sto lavorando a un progetto in cui è necessario utilizzare PowerPoint da C# .net. Inizialmente, ho sempre creato una singola istanza. A partire da oggi, mi piacerebbe avere più istanze in esecuzione. Lo faccio in questo modo:Impossibile creare più istanze di PowerPoint

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

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

ma quando chiedo il manico di entrambi i casi, chiamando

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

tanto sono la stessa maniglia due volte. La mia conclusione è che l'applicazione viene avviata una sola volta e TaskManager conferma che: Solo un processo.

Come mai c'è una sola istanza di PowerPoint in esecuzione e come posso farlo funzionare?

risposta

4

Invece di più istanze, perché non fare riferimento alle presentazioni multiple aperte nella singola istanza?

Quando un utente "Esce da una colonna", è possibile chiudere una sola presentazione, ma lasciare aperto PPT, a meno che non sia l'ultima presentazione aperta.

2

PowerPoint e Word condividono la stessa istanza. D'altra parte, Excel ti consente di avere più istanze. Per avere due istanze in esecuzione è necessario avviare l'altra istanza come utente diverso.

Perché sono necessarie più istanze? Per mostrare due presentazioni su due monitor?

+0

L'app che sto scrivendo è (tra molte altre cose) per la presentazione di presentazioni PowerPoint. Se aggiungi una presentazione a una colonna (tipo di area di lavoro), quella colonna deve essere riempita con le anteprime della diapositiva del ppt. Ecco perché ho bisogno di PowerPoint. Dopo di ciò, si può presentare il ppt. Ciò avvia anche PowerPoint. Queste cose dovrebbero essere in grado di accadere allo stesso tempo e dovresti essere in grado di aprire un ppt e anche uscire da un'altra colonna con un ppt. – Excel20

+1

Penso che sia necessario eseguire due istanze con utenti diversi o utilizzare PowerPoint da Office 2010 (beta) che dovrebbe funzionare con più finestre. –

+1

@MikaelSvenson Powerpoint condivide 1 istanza, Word ed Excel non condividono 1 istanza. – Paul

1

In base al tuo commento a Mikael, c'è un'altra soluzione. Questo è VBA, ma facilmente trasportabile in C#. Basta aprire la presentazione (nascosta) ed esportare ogni diapositiva come PNG. Quindi puoi visualizzare quei PNG nella tua colonna.

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 

Poi, quando un utente fa clic qualcosa, il primo si può chiudere e il vostro nuovo PPT può mostrare.

+0

Uso questa tecnica già nelle colonne, ma non è sufficiente per la visualizzazione, perché ignora le animazioni sulle diapositive e mostra solo il primo/ultimo stato. – Excel20

+0

@ Excel20: Sì, questo era l'intento: puoi avere un modo leggero di mostrare le diapositive nella colonna e poi puoi caricare il tuo mazzo. –

4

This link discute come utilizzare un nuovo account utente per creare più istanze di PowerPoint. Funziona bene se lo esegui sempre dallo stesso computer, ma non è particolarmente facile da distribuire.

+0

Questo non sarebbe preferibile, dal momento che l'app verrà distribuita tra centinaia di utenti, possibilmente con competenze informatiche da zero a zero. – Excel20

-1

Per il 2007 agli utenti di salvare un ppt (x) come pdf

Almeno pdf può essere aperto come istanze separate

È possibile salvare indietro come .doc (la mia versione di Acrobat Pro 9.5.2 è); il .doc è OK ma non perfetto, ma almeno posso tagliare e incollare tra .doc e .ppt (x) :-)

BTW - Word 2007 apre ogni documento come un'istanza separata, almeno nella mia installazione, l'installazione viene eseguita dai nostri esperti IT.