- ベストアンサー
コモンダイアログコントロールで選択されたブリンター名を得る方法
- コモンダイアログコントロールで選択されたブリンター名を得る方法を教えてください。現在VB5で作業をしています。作成中のアプリケーションが通常使うプリンタ名をユーザーにコモンダイアログで選択してもらってそのプリンタを次回起動時にすぐ使えるようにPrintersオブジェクトで選択出来るようにする為に保存しておくのが目的です。(Windowsのシステムで設定している「通常使うプリンタ」とこのアプリケーションが通常使うプリンタとは必ずしも一致しないことを前提に)そして、PrinterDefault=Falseの時、選択されたプリンタ名を再びコモンダイアログに反映する方法も教えて頂きたいです。
- [印刷] 及び[プリンタの設定] ダイアログ ボックスでユーザーが選択をしたプリンター名をコードで得る方法がよく解りません。ShowPrinterメソッド発行前に設定出来る「Flags」の定数に、cdlPDReturnDefault &H400 通常使うプリンタ名を取得します。とヘルプには有りますが、どのような手段でこれを使って選択したプリンタ名を取り出せば良いのかよく解りません。又、定数「cdlPDReturnDC」「cdlPDReturnIC」には、「プリンタの情報コンテキストは、ダイアログ ボックスの hDC プロパティに格納されます。」と言うような説明が有るので、その中でプリンタ名が書かれているのかなと思ったりもしますが、どの様に利用すれば良いのかも判りません。
- 何分VBの使用経験が少な過ぎるのであまりよく解っていないので噛み砕いて教えて頂ければ幸いです。よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
VBのプリンタダイアログ制御はかなり怪しい物です。 プリントダイアログでの操作は、その場での出力用の 設定を取得する以上のことはあまり期待できません。 若しくはHDCで描画操作を直接行うかですが、そこから デバイス名は取得不可です。 もしアプリケーションで選択したプリンタ名を維持して おくのであれば、システムの「通常使うプリンタ」を 利用して、こんな感じに 1.コモンダイアログの PrinterDefault を true に してShowPrinter し、「通常使うプリンタ」を 変える。 2.Printerオブジェクトで Printer.DeviceName で 変更後のプリンタ名をキープ とするぐらいかと思われます。 -------------------------- Dim myprintername As String '「通常使う~」を、一時的に保存したいプリンタに変更 CommonDialog1.PrinterDefault = True CommonDialog1.ShowPrinter 'それを保存 myprintername = Printer.DeviceName 'Debug.Print Printer.DeviceName -------------------------- また cdlPDReturnDefault についてはヘルプの記述ミスで 正確には<ダイアログを表示せず設定値のみを取得する> といった意味です(ヘルプの大間違い) 参考URLのラスト数行などを読んでみても結構悲しく なります(その付近の「KnowrageBase」のリンク先は さらに過酷です)
お礼
ご返事有り難うございます。 PrinterDefault=False の設定ではプリンタ名を求めるのは無理のようですね。 やはり回答に書かれた方法ぐらいしかVBだけで実現するには無理が有ると言う事でしょうか。 参考URLに書かれていた最後の方の「通常使うプリンタが変更されてしまう 」を避けたくて PrinterDefault=False でなんとかならないかと頑張ったんですが、API等を使って実現しなければいけないようですね。 Cの知識の無い者にとってかなりハードルが高くなりそうです。 ヘルプだけを見ていたのでは得られない貴重な情報を頂いて有り難うございます。
補足
結局よく解って居ないながらもAPIを使う事で何とか実現しつつあります。 どうも有り難うございました。