NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

ファイルパスで読み込んだ画像をプロジェクタで投影したい

ファイルパスで読み込んだ画像を外部のプロジェクタで投影したいと考えています。

フロントパネルにピクチャ表示器を配置し,プロパティを編集してPCの画面サイズで表示しても思ったように投影できません。

PowerPointのスライドショーやWindows media playerのように背景を黒にして全画面で投影したいです。

このようなことは可能でしょうか。

0 件の賞賛
メッセージ1/8
3,084件の閲覧回数

 ピクチャ制御器ではピクセル等倍で表示されてしまいますし、フロントパネル・制御器もろとも画面サイズにフィットさせないといけないので、なかなかうまくいかなそうですね。

 

添付でご提案する方法はかなり力技ですが、「PowerPointスライドショーのように」とのご要望なので、指定の画像ファイルをLabVIEWから「PowerPointスライドショーとして」全画面表示させてしまう・・・というものです。

中身は複雑に見えると思いますが、ActiveXで、PowerPointの新規プレゼンテーションに背景用の黒い長方形と、スライドにサイズフィットさせたファイル画像を配置し、スライドショーを起動します。指定秒数後(デフォルト5秒)、自動でスライドショーから戻ります。裏で準備するプレゼンテーションは跡形もありません。

 

ActiveXですので、PowerPoint VBAを記述しているのと同等です。

勿論、PCにPowerPointがインストールされていることが必要です。

実行するときに、既に別のPowerPointプレゼンテーションが起動していても特に問題は無いと思います。

実行時、ウラでPowerPointが起動する分、最初は少しだけ待たされるかも知れません(動作としてはオモテには見えてこないはずですが)。

(画像のフィットサイズは、画面サイズというよりはデフォルトのスライドマスタのサイズです。通常、画面サイズの方が左右が広いので、左右は黒帯になるため、完全なフルスクリーンフィットではなく、横長画像では上下左右が黒帯になります)

 

実用的かどうかは分かりませんが、、、、一応「画像を全画面表示」ということで、、

メッセージ2/8
3,014件の閲覧回数

返信が遅くなってしまい申し訳ありません。

いただいたVIを参考にして望んでいた動作を実現することができました。

ありがとうございます。

0 件の賞賛
メッセージ3/8
2,978件の閲覧回数

しばらくプログラムを動かさないうちにエラーが起こるようになりました。

 

eeror:-2147312566

vi内のタイプ ライブラリ/DLL の読み込みエラーです。

 

というエラーです。

おそらくMSの自動更新が影響しているのだと思いますが、原因が分かりません。

一度他のパソコンにデータを移して実行した際にも同様のエラーが起こり、こちらは

管理者権限で実行することで解決しました。

しかし、他方のパソコンのエラーは治りません。

どのような解決策があるのでしょうか。

0 件の賞賛
メッセージ4/8
2,774件の閲覧回数

原因は不明ですが、エラーの内容からしてDLLを叩いているところは以下のところしか無いため、一旦ここを無効化して実行してみてもらえますでしょうか?

こうすると、VIが前面に出たままになりますが、エラーなく実行できるかどうか。

 

170708-sample1-a1.png

 

とりあえず実行できるなら、ここを別の方法に変えられると思います。

(実行できない、エラーがなくならない、PPTのスライドショーにならない、とかだと困るのですが・・)

 

やりたいのは「スライドショーよりも前にLabVIEWのVIウインドウが来てほしくない」だけなので、実行の最初にプロパティノードを置いて、右クリック⇒VIサーバクラスから「VI」を選び、プロパティから「フロントパネルウインドウ」⇒「状態」を選んで、Minimizedの値を入力(作成で値とすれば得られると思われます)、とすることで、VIウインドウが最小化されます。(VIリファレンスは接続しなくても「このVI」として実行されるはず)

 

標準のuser32.dllが叩けない原因はよくわかりませんが、当方のPC(Window7)ではWindowsのUpdateが行われていても特に問題なく実行できます。ただ、別のPC(Window10)では上記と同じ箇所でPPTの前面化が通らずVIウインドウが手前に表示されたままになりました。というわけで、PPTの前面化が上記の方法ではうまくいかないことがあるので、VIウインドウの方を最小化する、という方法で逃げるのが良いかなと思います。

(なお、当方のLabVIEWはversionが古く、そもそもご指摘のエラーコードを持っていません。また、VIプロパティでフロントパネルウインドウの「状態」が無く、プロパティノードでの最小化が出来ないので、最小化自体をやはりDLLを叩く必要があります。当方のWin10のPCではそれで実行できていますが、DLLを叩かずにプロパティノードで最小化できるならそれで良いかと思います)

0 件の賞賛
メッセージ5/8
2,765件の閲覧回数

色々試してみましたが、やはりエラーが起こってしまいます。

一番最初のパワポのActiveXをオープンするところでエラーが起こっているようです。

0 件の賞賛
メッセージ6/8
2,737件の閲覧回数

なるほど、DLL呼び出しでなく、ActiveXのほうのタイプライブラリがらみのエラーですね。「vi内のタイプ ライブラリ/DLL の読み込みエラーです」のDLLを見てDLLを叩いているCall Library Functionのところと勝手に思ってしまいました・・

 

ちなみに、一度は動作したという方のPCは、PowerPointのバージョンが変わったりしましたか? Officeを替えたとか。今回のviは、LabVIEWと無関係でかつ誰もが必ずしも同じ条件ではない機能(PowerPoint)を呼び出しているため、このようなエラーに対して「これが原因/こうすればよい」と簡単に示しにくいところはありますが、タイプライブラリが読み込めない、ということで、タイプライブラリ自体を選び直す必要があるかも知れません。

 

今回のviのブロックダイアグラムの一番左端に制御器が1つあり、これを右クリックして「制御器を表示」し、隠してある制御器を見えるようにしてください。

170708-sample1-p.png

フロントパネルに制御器が現れるので、それを右クリックして「ActiveXクラスを選択」でタイプライブラリの選択リストを表示します。ここで、私の方では、以下のようにしてPowerPointを選択することができています(これが選択されて記述されています)。

170708-sample1-type.png

 

このようなPowerPointのタイプライブラリが、表記やversionが違っても選択し直すことができるなら、実行できるのではないかと思いますが、これが表示されないと、実行できないのかな、と思います。

PowerPointがインストールされていれば表示されるはずと漠然とは思いますが、表示されない、又は実行できていたものができなくなる、の理由は残念ながら良くわかりません。バージョンは関係するかも知れません。

(私もできれば環境依存なくどんな条件でもオールマイティに実行できるように書きたいですが、この手のものはなかなか難しいですね。かつではExcelで、あるバージョンを境にVBAのメソッド名が変わってしまい(Value⇒Value2)、一斉にプログラムの書き換えを余儀なくされたこともありましたし)

0 件の賞賛
メッセージ7/8
2,732件の閲覧回数

別アプローチを試してみました。

 

もし実行できるようなら、こちらの方がいいかもです。

新しい方法は、PowerPointを使わず、「Windows フォト ビューワー」を使います。要は、画像を開いて表示されているフォトビューワー上でのスライドショーをプログラム的に模擬します。

 

添付のviは、

①まず、ローカルテンポラリフォルダ内に、一時的な空っぽのフォルダをこっそり生成します(既存のフォルダとはかぶらない名前)

②ここに、指定された画像ファイルをコピーします。この時、このフォルダにこの画像ファイル1個しかないのがポイント。

フォトビューワーを起動し、指定したファイル(テンポラリにコピーした方)を開きます。

④③でフォトビューワーのウインドウが開くのを待ち、開いたらすかさず最前面に出します。

⑤すかさずキーボードイベントを発行し、「F11キー」押下を模擬します(F11キー=スライドショーの開始、を内部で行う)。これで、スライドショーが始まります。

⑥指定した秒数待ちます。ここで、このフォルダには指定された画像(のコピー)が1個しかないことがポイントで、「次の画像に移る」ということがありません。

⑦指定した秒数経過したら、今開いていた画像のフォトビューワーを強制的に閉じます。

⑧テンポラリのファイルとフォルダを消去します。

 

フォトビューワーで画像を開いた時のウインドウ名が「画像ファイル名 - Windows フォト ビューワー」であることを前提としています。

また、フォトビューワーのスライドショーを使うので、表示される画像のサイズは上下または左右が端に揃ってくれます。また、最後にフォトビューワーを閉じる時は「その画像」のだけ閉じるので、他にフォトビューワーで開いている画像があってもそちらは閉じません。

こちらだとどうでしょうか? これで走るようなら、パワポ版よりシンプルだと思います。

実行前に画像ファイルを指定して、秒数を入れてから、実行してみて下さい。ファイルが存在しない場合はスキップします。

0 件の賞賛
メッセージ8/8
2,718件の閲覧回数