• 締切済み

VBのPrintersコレクションについて教えてほしいです。

VBのPrintersコレクションについて教えてほしいです。 先日VBのフォームを印刷したいという質問をし、そのときPrintersコレクションを使うとできると回答いただきました。 ↓ここを教えていただきました。 http://www.hanatyan.sakura.ne.jp/vbhlp/print03.htm 確かにPrintersコレクションを使ってプリンタをセットして印刷することができましたが、 よくよくコレクションアイテムを見てみると、現在コントロールパネルのプリンタ内に存在しないプリンタがいくつかありました。 (いずれも以前に設定したことがあるプリンタでした) そして現状のままプログラムを他のユーザで実行すると印刷させたいプリンタがアイテムに無い状態でした。 このPrintersコレクションのアイテムというのはどういった内容のものを保持しているのでしょうか? またこのアイテムを現在のものに置き換えることはできないでしょうか? できる場合はVBソース内で行いたいと思うのですができますでしょうか? 環境はVB6、Vistaです。よろしくお願いします。

みんなの回答

回答No.1

>そして現状のままプログラムを他のユーザで実行すると印刷させたいプリンタがアイテムに無い状態で >した。 アイテムに無いとは、どのアイテムを指しておられるのでしょうか? メモ帳等の他のアプリで、プリンターを選択した場合に同様に表示されませんか? >このPrintersコレクションのアイテムというのはどういった内容のものを保持しているのでしょうか? 過去にそのパソコンに登録したプリンター(ドライバー)です。 それと、MS のFax 等も含まれます。 またこのアイテムを現在のものに置き換えることはできないでしょうか? 現在の物とは、どう言った物でしょうか? 現在実際に接続されている物、又は、必要な物等指しているのなら、不要な物は、コントロールパネル から削除して下さい。 >できる場合はVBソース内で行いたいと思うのですができますでしょうか? 敢えて、プログラムから選別するなら、その条件に合っているかをWin32 API 関数等を使って 調べて下さい。 例えば、プリンターがオンラインになっているとかを。 そもそも、指定のプリンターで印刷したいと言う事だったと思うのですが、どのプリンターで印刷 したいかをユーザーに選択して貰うのが仕様なのではなかったのですか?

kininaruqa
質問者

補足

vbhanatyanさん、度々の回答ありがとうございます。 今回のプログラムとしては、レイアウト変更等による動作の確認用にPC内に登録されているプリンタを印刷させるように作成しています。 部屋ごとにプリンタが設置されている状態ですが、PCが別の部屋に移動する場合もあり都度部屋に合わせてプリンタを追加/削除しています。 また、書き忘れましたがフォームにはリストボックスがあり、オブジェクト.ExecQuery("select * from win32_printer")で取得したものを格納しています(こちらは現在のコントロールパネルと内容が同じ)。 上記が前提条件として、VB内でPrintersコレクションでDeviceNameを拾ってくるとコントロールパネルから削除されているプリンタもあったりします。 これは過去に登録されたものを保持しているということなので納得なのですが、部屋移動の際に追加したプリンタが拾ってこれない場合もある、という状態でこれだと印刷テストできません(つまり内容が古い)。 また、同じPCに異なるユーザで実行したときもPrintersコレクションで拾う内容が異なっている場合も見受けられました。 私のイメージとしてはPrintersコレクションが過去追加したプリンタ+現在のコントロールパネルの内容をあわせた内容にならないものか、という風に考えています。 なのでコレクションの内容をリフレッシュとかできないものか、と思いました。 説明がうまくできずわかりにくいかと思いますが、またなにかありましたらお願いいたします。

関連するQ&A