• 締切済み

VB6.0でのプリンタ設定について

はじめまして。 現在VB6.0にて、プリンタダイアログを表示させずに、プリンタの変更~印刷を行うプログラムを作成しています。(とある印刷は別のプリンタで印刷のイメージです) 方法はWIN32APIとWMIの2通りがあるようですがなかなか作成することができません。 WIN32API使用に関しては特に??で勉強中です。 イメージの流れでは以下を考えています。 (1)通常使用プリンタのバックアップ (2)通常使用プリンタの変更 (3)印刷 (4)通常使用プリンタを戻す すいませんがご教授いただけませんでしょうか?

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

WMIでは規定のプリンタ名が分かるだけで、設定できないのでは? APIのGetProfileString、WriteProfileStringを使う方法が昔から ある手法ですね。 Declare Function GetProfileStringA& Lib "KERNEL32" _ (ByVal A$, ByVal K$, ByVal D$, ByVal B$, ByVal L&) Declare Function WriteProfileStringA& Lib "KERNEL32" _ (ByVal S$, ByVal K$, ByVal D$) 'おまけのAPI Declare Function lstrlenA& Lib "KERNEL32" (ByVal A$) Declare Function SysAllocStringByteLen$ Lib "OLEAUT32" _ (ByVal X$, ByVal L&) (1)現在の規定のプリンタの取得 Dim P$ P = Space(256) GetProfileStringA "windows", "device", "", P, 256 P = SysAllocStringByteLen(P, lstrlenA(P)) (2)プリンタ名の情報を得る Dim P$ P = Space(256) GetProfileStringA "devices", プリンタ名, "", P, 256 P = SysAllocStringByteLen(P, lstrlenA(P)) ★プリンタ名の所はそちらの環境に従って、変えてください。 (3)規定のプリンタの変更 WriteProfileString "windows", "device", 設定データ ★設定データはプリンタ名 + "," + プリンタ情報です。 戻す時は(1)の情報を指定すればよい。

sugizo0419
質問者

お礼

ご回答ありがとうございます。 自分は.NET開発ばかりしていたので書き方から間違っていたようです。。 参考にさせていただきました通り、以下の方法にて作成できました。 (1)WINAPIより端末の通常使用するプリンタ情報(プリンタ名・ドライバ名・ポート名)を取得し、バックアップ GetProfileString (2)INIファイル等で設定しておいた指定変更プリンタ名から、端末WIN情報のドライバ名・ポート名の取得 (3)上記(2)の情報で書き換え WriteProfileString SendMessage (4)印刷 (5)上記(1)の内容で書き換え WriteProfileString SendMessage 今回疑問に感じたのはポート番号ではなくポート名を使用していることです。 それと(3)(5)書き換え後のsendmessageも端末内で更新情報を通知しているようですが、何をしているのかよくわかりません。 こちらも何か参考情報がありましたら教えてください。 ちなみに、WMIは.NETにて可能でした。APIだとプリンタ情報がプリンタ名・ドライバ名・ポート名の3つに対し、WMIだとプリンタ名のみでいけました。

関連するQ&A

  • VBでフォームを印刷させたいと思っています。

    VBでフォームを印刷させたいと思っています。 PCの動作確認用にVBで作成したフォームを、PC内に設定されているプリンタ全てから印刷させるようなプログラムを組んでいます。 現状ではprintformで印刷しているのですが、これだと通常使うプリンタで印刷されてしまうので印刷処理前に通常使うプリンタを変更してから印刷処理しています。 ただ、実際に作業で利用してみたところ通常使うプリンタが変更できずに印刷処理できないことがありました。 そこで、通常使うプリンタではなく指定したプリンタにフォームを印刷させたいと思いました。 なにかよいサンプルやソースをご存知であれば教えていただけると助かります。 利用しているのはVB6です。 よろしくお願いいたします。

  • プリンタの設定について

    Windows7(SP1)+VB.NET(VS2013)にてアプリケーションを作成しています。 既定値がカラー印刷の富士XEROXの複合機で印刷しようとしています。 経費の関係で大量ページの印刷や、モノクロでも良い印刷をプログラムのほうでモノクロにし印刷できるようにしたいと思っています。 色々なサイトを調べてGetPrinter()、SetPeinter()などのAPIを使用してDEVMODE構造体を操作して変更するようにしました。が、用紙サイズ、印刷方向の変更はできたのですが、カラーの変更が出来なくて困っています。何故カラーの変更が出来ないのでしょうか?

  • VBでプリンタジョブの制御について

    早速ですが、WIN2000、VB6で、 WORD等のファイルを印刷するプログラムを作成しています。 プログラムは印刷終了まで待ち、終了後後続の処理を 実行したいのですが、プリンターの状態を把握する方法が よくわかりません。 このようなことが可能なのか? 可能であればその方法か? あまり表現がよくないと思いますが、わかる方がいましたら、よろしくお願いします。

  • VBからのプリンタ制御について

    VBからプリンタに対し両面印刷、カセット、手差しを指定したいのですが、 どのようにプログラミングすればよろしいのでしょうか? できればサンプルプログラムがあれば幸いです。 環境  Win2000 VB6.0 プリンタ Canon LASER SHOT LBP-950 宜しくお願いいたします。

  • VB6でのプリンタ設定について

    メモ帳等のように通常使うプリンタを変更することなく、アプリが起動している間は 任意のプリンタを選択することが出来、アプリ専用のプリンタ設定を保持するには どうしたらいいでしょう。 1.OpenPrinter 2.GetPrinter で PRINTER_INFO_2 から DEVMODE を取得 3.DEVNAMES を設定 4.PRINTDLG で設定画面を表示 上記の手順でプリントダイアログを表示するとこまでは出来ましたが ここで設定された情報を Printer オブジェクトに反映させる方法がわかりません。 ResetDC だと色、用紙の向きなど基本的なものは反映されましたがプリンタ固有の 情報(スタンプマークなど)までは反映されませんでした。 SetPrinter だとすべての情報が反映されましたが通常使うプリンタの設定まで 変わってしまいました。 わかりづらい部分が多々あるとは思いますが、どなたか教えていただけませんでしょうか よろしくお願いします。 VB6 XP SP2

  • エクセルのVBAでプリンタを変更したいのですが・・・

    エクセルのマクロでプリンタを変更して印刷をしたいと思っています。 そこで、   (1) 利用できるプリンタ   (2) (1)のポート   (3) (1)のプリンタドライバ を取得したいのですが、どうすればよいのでしょうか? VBではプリンタオブジェクトを使って簡単に取得できるようなのですが、VBAでの方法がわかりません。 プリンタ設定ダイアログなどは表示せずに、APIなどを使ってできないものでしょうか? どうぞよろしくお願いします。 【環境】Windows2000、Office2000

  • エクセルファイル毎に印刷するプリンターを設定したい。

    いつもお世話になっております。 Win95 + Excel97を使用しております。 作成するドキュメントの内容によって印刷するプリンターが モノクロレーザーであったり、カラーインクジェットであったりします。 ところがこの2台の印刷可能範囲が異なっていまして(レーザーの方が印刷 範囲が広い)"通常使うプリンタ"をモノクロレーザーにしてある為、 ファイルを開く度、毎回"印刷"ダイアログボックスを出して対象プリンタを 設定しなければならず大変不便しております。 何か"このエクセルファイルにはこのプリンターを使用する"といった設定方法 はございませんでしょうか? 以上よろしくお願いいたします。

  • VB2008(印刷ダイアログ)上でExcel印刷

    現在VB2008でExcel操作(COM参照使用)をしているのですが、 Excelシートを印刷する際にVB2008にある印刷ダイアログにて プリンタを設定後そのシートを印刷することは可能ですか? 現在はExcelVBAの起動時マクロでプリンタ設定しているのですがプリンタの中にはネットワークプリンタもあり、しばしばプリンタ名(後ろのNe:○○の番号が可変)が変わりそのたびにコードを書き変えています また複数台プリンタがあり通常使うプリンタがラベルプリンタなのでA4紙データを印刷するととんでもないことになるので(汗) そのためVB2008上でダイアログからプリンタを選んで印刷できればいいなと考えています ご教授お願いします。

  • Win2000からXPマシンを制御

    WMIを使用したVBプログラムを作成しています。 開発環境:Win2000 VB6(SP5) WMIを使用してリモートマシンの電源OFFなどの制御を 行なっていますが、自マシン(Win2000)からNT、2000の マシンに対しては電源OFFできました。 が、XPマシンに対して処理を行なうと、WMIでのエラー (アクセス拒否)となります。 XPに対しては、WMIの使い方が違っているのでしょうか? (WMI始めたばかりでよく理解しておりません)

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

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

専門家に質問してみよう