2

私はここでこの主題に関する多くの投稿を見てきましたが、この問題に直接答えている人はいないようです。2台目のモニターで実行されているPowerpointの2つのインスタンスを制御したいと思います。

理想的なソリューションは次のようになります。

PowerPoint.Application PPTViewer1 = new PowerPoint.Application();
PowerPoint.Application PPTViewer2 = new PowerPoint.Application();

これは、PowerPointの2つのインスタンスを開始し、プレゼンテーションをロードし、各インスタンスからスライドショーを開始するだけで、手動で行うことができます。2つのスライドショーを手動で切り替えることができ、それぞれが期待どおりに前面に表示されます。

だから...VSTOとC#を使用してプログラムでこれを行うにはどうすればよいですか?私の前にいる他の人と同じように、Interop.PowerPointインターフェイスは単一のインスタンスのみを作成することがわかります。そうでなければ、私が探している結果を簡単に達成することができました。

さらに、私はこのタスクのためのサードパーティコンポーネントを探していません。

どんな助けでも大歓迎です。

前もって感謝します。

4

3 に答える 3

1

Powerpointの複数のインスタンスを実行しているように見えるかもしれませんが、そうではありません。それ自体のインスタンスは1つだけ許可されます。タスクリストにPowerpnt.exeの2つのインスタンスが表示されている場合は、時々発生することですが、何かがうまくいかず、メモリにゾンビが残っていることを意味します。

于 2012-06-11T23:56:38.033 に答える
0

Powerpoint COM オブジェクトの各インスタンスは、同じ全画面表示ウィンドウを共有します。どのプレゼンテーションにそのウィンドウがあるかを切り替える方法を知りません

解決策は、独自のウィンドウで Powerpoint ディスプレイをホストすることです

したがって、これにより、ウィンドウをスケーリングして、1 つのモニターに複数のプレゼンテーションを表示したり、あるモニターから別のモニターに移動したりできますか?

例えば

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);
于 2012-07-31T09:31:18.143 に答える
0

完全に理想的ではないかもしれませんが、別のユーザーとしてインスタンスを開始することを提案するリファレンスを次に示します (このサイトは PowerPoint 2007 用であることに注意してください)。

runas /user:username "C:\Program Files\Microsoft Office\Office12\POWER PNT.EXE"
于 2012-06-08T22:29:22.197 に答える