コモンダイアログコントロールで選択されたブリンター名を得る方法

このQ&Aのポイント
  • コモンダイアログコントロールで選択されたブリンター名を得る方法を教えてください。現在VB5で作業をしています。作成中のアプリケーションが通常使うプリンタ名をユーザーにコモンダイアログで選択してもらってそのプリンタを次回起動時にすぐ使えるようにPrintersオブジェクトで選択出来るようにする為に保存しておくのが目的です。(Windowsのシステムで設定している「通常使うプリンタ」とこのアプリケーションが通常使うプリンタとは必ずしも一致しないことを前提に)そして、PrinterDefault=Falseの時、選択されたプリンタ名を再びコモンダイアログに反映する方法も教えて頂きたいです。
  • [印刷] 及び[プリンタの設定] ダイアログ ボックスでユーザーが選択をしたプリンター名をコードで得る方法がよく解りません。ShowPrinterメソッド発行前に設定出来る「Flags」の定数に、cdlPDReturnDefault &H400 通常使うプリンタ名を取得します。とヘルプには有りますが、どのような手段でこれを使って選択したプリンタ名を取り出せば良いのかよく解りません。又、定数「cdlPDReturnDC」「cdlPDReturnIC」には、「プリンタの情報コンテキストは、ダイアログ ボックスの hDC プロパティに格納されます。」と言うような説明が有るので、その中でプリンタ名が書かれているのかなと思ったりもしますが、どの様に利用すれば良いのかも判りません。
  • 何分VBの使用経験が少な過ぎるのであまりよく解っていないので噛み砕いて教えて頂ければ幸いです。よろしくお願いします。
回答を見る
  • ベストアンサー

コモンダイアログコントロールで選択されたブリンター名を得る方法を教えて下さい。

現在VB5で作業をしています。 コモンダイアログコントロールで選択されたブリンター名を得る方法を教えて下さい。 作成中のアプリケーションが通常使うプリンタ名をユーザーにコモンダイアログで選択してもらってそのプリンタを次回起動時にすぐ使えるようにPrintersオブジェクトで選択出来るようにする為に保存しておくのが目的です。(Windowsのシステムで設定している「通常使うプリンタ」とこのアプリケーションが通常使うプリンタとは必ずしも一致しないことを前提に) そして、PrinterDefault=Falseの時、選択されたプリンタ名を再びコモンダイアログに反映する方法も教えて頂きたいです。 [印刷] 及び[プリンタの設定] ダイアログ ボックスでユーザーが選択をしたプリンター名をコードで得る方法がよく解りません。 ShowPrinterメソッド発行前に設定出来る「Flags」の定数に、 cdlPDReturnDefault &H400 通常使うプリンタ名を取得します。 とヘルプには有りますが、どのような手段でこれを使って選択したプリンタ名を取り出せば良いのかよく解りません。 又、定数「cdlPDReturnDC」「cdlPDReturnIC」には、「プリンタの情報コンテキストは、ダイアログ ボックスの hDC プロパティに格納されます。」と言うような説明が有るので、その中でプリンタ名が書かれているのかなと思ったりもしますが、どの様に利用すれば良いのかも判りません。 何分VBの使用経験が少な過ぎるのであまりよく解っていないので噛み砕いて教えて頂ければ幸いです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#2009
noname#2009
回答No.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」のリンク先は さらに過酷です)

参考URL:
http://www.zdnet.co.jp/help/howto/win/win2000/0007complus_vb/chap07/58.html
yohkah
質問者

お礼

ご返事有り難うございます。 PrinterDefault=False の設定ではプリンタ名を求めるのは無理のようですね。 やはり回答に書かれた方法ぐらいしかVBだけで実現するには無理が有ると言う事でしょうか。 参考URLに書かれていた最後の方の「通常使うプリンタが変更されてしまう 」を避けたくて PrinterDefault=False でなんとかならないかと頑張ったんですが、API等を使って実現しなければいけないようですね。 Cの知識の無い者にとってかなりハードルが高くなりそうです。 ヘルプだけを見ていたのでは得られない貴重な情報を頂いて有り難うございます。

yohkah
質問者

補足

結局よく解って居ないながらもAPIを使う事で何とか実現しつつあります。 どうも有り難うございました。

関連するQ&A

  • コモンダイアログのプリンター設定を有効にしたい

    Win XP、VB6.0 コモンダイアログのプリンター設定を有効にする方法を教えてください。

  • コモンダイアログボックスの並び順が逆順になって戻らない。。

    OSは、Windows XP homeです。 いろいろなアプリケーションで 「ファイルを開く」や「名前をつけて保存」する時などに表示される 「コモンダイアログボックス」について質問です。 この「コモンダイアログボックス」、通常ならば表示したときに [名前の正順]でアイコンが並んでいると思うのですが、 これがなぜか、[名前の逆順]で表示されるようになってしまいました。 特定のアプリケーションだけでなく、全てのアプリケーションで同じ症状です。 いちいち、[右クリック]-[アイコンの整列]-[名前]で元に戻すのも 全アプリケーションで毎回となると手間に感じます。 どうすれば、以前のように「コモンダイアログボックス」が[名前の正順]で開かれるのでしょうか? ちなみに、一度[名前の正順]に戻しても、コモンダイアログボックスを開き直すと また[名前の逆順]表示に戻ってしまいます。 どうか直し方を教えてください、お願いします。

  • コモンダイアログの表示

    VB.NETでエクセルをコントロールするS/Wを作っています保存時にコモンダイアログを表示させたいのですが、ツールBOXに見あたりません。どうすれば出てきますか。

  • ディレクトリを選択するコモンダイアログボックス

    Windows APIに関する質問です。 GetOpenFileNameを使うとファイルを選択するコモンダイアログボックスが使えますが、ファイルではなくディレクトリ(フォルダー)を選択するコモンダイアログボックというのは存在するのでしょうか?

  • コモンダイアログを表示したい

    Windows98/VisualBasic5.0を使用しています。 ファイル名を指定させるために、コモンダイアログを表示したいのですが方法がわかりません。 コントロールを貼り付ければよいのでしょうか? 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • コモンダイアログの設定

    アプリのファイル保存の時にでてくるコモンダイアログですが、デフォルトだとマイドキュメントが押下された状態になっていますが、これをデスクトップに設定する方法はありますか?

  • 印刷ダイアログのプリンタの選択の種類

    印刷ダイアログボックスのプリンタの選択をコンボボックスから選択するようにするにはどうしたら良いでしょうか? アイコンで選択するようになってしまいました。 アプリケーションに依存するのでしょうか? 宜しくお願いいたします。

  • 実行時にコモンダイアログのファイルの種類に任意のフィルタ条件

    言語:VB6 OS:WindowsXP 実行時にコモンダイアログの「ファイルの種類」欄に対して 任意のフィルタ条件を設定可能とする方法が分かりません。 例えば、コモンダイアログを開いた時に「ファイルの種類」が 編集可能になり、ユーザーが仮に「test*.txt」と設定すると 条件にあったファイル「text1.txt」や「test2.txt」が表示する と言ったものです。 実現方法をご存知の方がいましたら教えてください。 どうぞ宜しくお願い致します。

  • Excel97のVBAでコモンダイアログを使いたい

    現在Excel97で二つのテキストデータベース(固定長形式)を読み込み、解析を行おうとしています。 現在、べたに二つのファイルのパスをコードに書き込めばファイルの読み込みも上手くいくのですが、やはりここは出来るならばファイル指定を汎用のダイアログで行えるようにしたいと思いあれこれ方法を探しています。 そこで読み込みたい二つのファイルのパスを、VBで利用できるCommonDialogで取得出来るなら、一からファイル選択用フォームを作成しなくても済むので楽になると思いついたのですが、Excel97のVBAでの転用がうまくいかなくて企画倒れの状態になっています。 参照設定でComCtrl32.OCXを読み込めればと思い試験してみたもののうまくいかず、次の方法が見つからずに途方に暮れています。 もしかしてVBAではコモンダイアログは利用できないのでしょうか?

  • 「プリンタの設定」ダイアログボックスのプリンタを指定したい。

    Excel VBAにて以下のコードを書き,接続されているプリンタ一覧の表示と設定は出来るのですが、のダイアログに表示されるプリンタを指定した物だけにしたいのです。 Application.Dialogs(xlDialogPrinterSetup).Show ダイアログの組み込み定数「xlDialogPrinterSetup」は引数でプリンタ名を持てる筈なのですが、どう書いてもエラーになってしまいます。 Application.Dialogs(xlDialogPrinterSetup).Show arg1:="プリンタ名" Application.Dialogs(xlDialogPrinterSetup).Show ("プリンタ名") Application.Dialogs(xlDialogPrinterSetup).Show(arg1:="プリンタ名") やりたい事は接続されているマシンの一覧の中から一つのプリンタを選択肢、それだけの設定ダイアログを出したいのです。

専門家に質問してみよう