0

カフェテリアの大型ディスプレイに接続されたコンピューターで実行されるC#アプリケーションがあります。アプリケーションは、すべてのPowerPointファイルをフォルダーから引き出し、各ファイルをスライドショーとして継続的に実行します。誰かがムービークリップをスライドに挿入することを決定するまで、すべてが正常に機能していました。問題は、映画が決して始まらないということです。PowerPointでプレゼンテーションを開いてショーを実行すると、それが機能します。プレゼンテーションを右クリックして[表示]をクリックすると、機能します。これが、プレゼンテーションを開いてスライドショーを開始するために使用しているコードです。

pres = app.Presentations.Open(pptPath, MsoTriState.msoTrue, MsoTriState.msoTrue, MMsoTriState.msoFals);
pres.SlideShowSettings.Run();

Run()映画を開始する方法を取得するために設定する必要がある他の何かがありますか?

編集:問題のプレゼンテーションには、映画を含むスライドが1つだけ含まれていました。別のスライドを追加すると、正常に機能しました。また、前にスライドを追加しようとしましたが、同じ問題が発生したため、問題はプレゼンテーションの最後のスライドにのみ存在するようです。

4

2 に答える 2

1

ここでの主な問題は、PowerPointアニメーション(ビデオ、オーディオ、カスタムモーションパスなど)SlideShowWindowは、フォーカスがある場合にのみ再生されることです。つまり、アプリを実行してPPTを起動しても、アプリはフォーカスを維持しているため、アニメーションは実行されません(ただし、実行中のデッキを手動で操作することはできます)。

これを回避する方法はいくつかあります。

  1. APISetWindowを呼び出しSlideShowWindowて、最前線に立つことができます。私の意見では、それを行うのに最適な方法ではありません。
  2. 最も簡単な方法は、.ppt/.pptxを.pps/.ppsx(PowerPoint Show)に保存することです。これで、同じコードを使用して実行でき、自動的に起動してフォーカスを取得します(そして、アニメーション[ビデオなど)は意図したとおりに実行されます)。
于 2010-06-19T00:00:21.560 に答える
-2

問題が見つかりました。thread.sleepプレゼンテーションのapp_SlideShowNextSlideイベントハンドラーに、あるスライドショーの終了と次のスライドショーの開始を処理するステートメントがありました。当時は考えていませんでしたが、このコードはスライドショー自体の同じスレッドで実行されていました。代わりにタイマーオブジェクトを作成し、必要なコードをタイマーのelapsedイベントハンドラーに移動しました。

于 2010-06-22T12:29:08.787 に答える