• 締切済み

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

kiki_sの回答

  • kiki_s
  • ベストアンサー率59% (147/248)
回答No.3

>変えないようにも出来るのでしょうか? APIで一時的に変更出来るかは分かりません。 しかし方法は色々あると思います。 例えば・・・ 印刷時に現在の設定を記憶、変更して、印刷終了時に元に戻す (プリンタ設定を表示させずに変更する) ※この方法は可能かどうかです アプリ起動時に現在の設定を記憶、変更して、印刷終了時に元に戻す ※この方法はアプリが異常終了などのトラブルがあった場合対処出来ません。

noname#63886
質問者

お礼

ありがとうございます、もう少しトライしてみます。

noname#63886
質問者

補足

下記のサイトからダウンロードしたPrinterModule.basとWin32API.basを使用して プリント機能を実現することが出来ました。 http://www.itmedia.co.jp/help/howto/win/win2000/0007complus_vb/chap07/65.html もうかなり前のことで申し訳ないのですが、おかしな箇所がありましたら アドバイスしてもらえませんでしょうか?よろしくお願いします。 ソースコードは下記の通りです。 'Form1 Option Explicit Private Sub Command1_Click() Dim ret As Long   ret = PrintSetup2(PD_PRINTSETUP, Me.hWnd) End Sub Private Sub Command2_Click() Dim ret As Long   ret = PrintSetup2(0, Me.hWnd)   If ret = True Then     Printer.ForeColor = vbRed     Printer.Print "ABCDEFG"     Printer.EndDoc   End If End Sub 'Module1 Option Explicit Public Declare Function ResetDC Lib "gdi32" Alias "ResetDCA" (ByVal hdc As Long, lpInitData As Any) As Long Public Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, ByVal Dev As Long) As Long Public Const DC_SIZE = 8 Public Const DC_EXTRA = 9 Public vDevModeData() As Byte Public PrinterName As String Public NeedSize As Long Public Function PrintSetup2(ByVal Flags As Long, ByVal FormHwnd As Long) As Boolean Dim lpDevMode As Long Dim lpDevNames As Long Dim hDevMode As Long Dim hDevNames As Long Dim dmSize As Long Dim DmExSize As Long Dim Pri As Printer Dim ret As Long If PrinterName = "" Then   For Each Pri In Printers     dmSize = DeviceCapabilities(Pri.DeviceName, Pri.Port, DC_SIZE, ByVal vbNullString, 0)     DmExSize = DeviceCapabilities(Pri.DeviceName, Pri.Port, DC_EXTRA, ByVal vbNullString, 0)     If dmSize + DmExSize > NeedSize Then       NeedSize = dmSize + DmExSize     End If   Next   NeedSize = NeedSize + 100   ReDim vDevModeData(0 To NeedSize - 1) As Byte Else   hDevMode = GlobalAlloc(GHND, NeedSize)   lpDevMode = GlobalLock(hDevMode)   CopyMemory ByVal lpDevMode, vDevModeData(0), NeedSize   GlobalUnlock hDevMode   hDevNames = GlobalAlloc(GHND, Len(vDevNames))   lpDevNames = GlobalLock(hDevNames)   CopyMemory ByVal lpDevNames, vDevNames, Len(vDevNames)   GlobalUnlock hDevNames End If vPrintDlg.lStructSize = Len(vPrintDlg) vPrintDlg.hwndOwner = FormHwnd vPrintDlg.hDevMode = hDevMode vPrintDlg.hDevNames = hDevNames vPrintDlg.Flags = Flags If PRINTDLG(vPrintDlg) <> 0 Then   If vPrintDlg.hDevMode <> 0 Then     lpDevMode = GlobalLock(vPrintDlg.hDevMode)     CopyMemory vDevModeData(0), ByVal lpDevMode, NeedSize     GlobalUnlock lpDevMode     GlobalFree vPrintDlg.hDevMode   End If   If vPrintDlg.hDevNames <> 0 Then     lpDevNames = GlobalLock(vPrintDlg.hDevNames)     CopyMemory vDevNames, ByVal lpDevNames, Len(vDevNames)     GlobalUnlock lpDevNames     GlobalFree vPrintDlg.hDevNames   End If   PrinterName = Mid(vDevNames.extData, vDevNames.wDeviceOffset - 8 + 1)   PrinterName = Left(PrinterName, InStr(PrinterName, Chr(0)) - 1)   For Each Pri In Printers     If UCase(Pri.DeviceName) = UCase(PrinterName) Then       Set Printer = Pri       Exit For     End If   Next   ret = ResetDC(Printer.hdc, vDevModeData(0))   If ret = 0 Then Exit Function   PrintSetup2 = True Else   PrintSetup2 = False End If End Function

関連するQ&A

  • vbから印刷時に、プリンタの厚紙設定をしたい。

    出力先プリンタの切り替えや、用紙サイズや向きやトレイなどは設定できたのですが、 用紙の厚さ(普通紙なのか厚紙なのかなど)が設定できません。 どうしたらできるのでしょうか? おそらく、厚紙設定は、そのプリンタ固有の情報なのでvbに用意されている一般的なプロパティでは対応できず、そのプリンタのドライバとのやり取りが必要なのかな?となんとなく想像していますが、ネットで調べても、なかなか答えに結びつきません。 分かる方、お願いします。

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

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

  • VB6でのネットワークプリンタ(OS:WInXP)に対する印刷

    ご存じの方がおられましたら教えていただきたいのですが・・・ 当方、VB6(SP6)でアプリを作成し印刷機能も作りました。 以前はWin2000からプリンタサーバー(Win2000につながっているプリンタ)に対してネットワーク印刷を行っていました。APIを使用して用紙方向等変更できてました。簡単な処理の流れとしては、 (1)現在選択されているプリンタの情報を取得し記憶しておく。 (2)用紙方向等の変更 (3)印刷 (4)記憶しておいた内容にプリンタを戻す と言う具合です。 ところが、社内環境がかわり、WinXPからプリンタサーバー(WinXPにつながったプリンタ)に対して上記の処理を行うとエラーが出力されます。 調べたところ、始めにOpenPrinter関数を呼んでいるのですがこの時点で戻り値が0(関数が失敗)が帰ってきています。 ソースは以下のような感じです(一部抜粋) ' 標準的な権利を要求することを示す定数の宣言 Public Const STANDARD_RIGHTS_REQUIRED = &HF0000 ' プリンタアクセス権の管理者権限を示す定数の宣言 Public Const PRINTER_ACCESS_ADMINISTER = &H4& ' プリンタアクセス権のユーザー権限を示す定数の宣言 Public Const PRINTER_ACCESS_USE = &H8& ' プリンタアクセス権すべての権限を示す定数の宣言 Public Const PRINTER_ALL_ACCESS = _ (STANDARD_RIGHTS_REQUIRED Or _ PRINTER_ACCESS_ADMINISTER Or _ PRINTER_ACCESS_USE) ' プリンタのオブジェクトハンドルを取得する関数の宣言 Declare Function OpenPrinter Lib "winspool.drv" _ Alias "OpenPrinterA" _ (ByVal pPrinterName As String, _ phPrinter As Long, _ pDefault As Any) As Long '**************************************************** '↓処理 ' プリンタ名を指定 strPrinterDeviceName = Printer.DeviceName ' プリンタアクセス権を指定 With udtPrinterDefaults .DesiredAccess = PRINTER_ALL_ACCESS End With ' プリンタのオブジェクトハンドルを取得 lngWin32apiResultCode = OpenPrinter(strPrinterDeviceName, lngPrinterHandle, udtPrinterDefaults) ↑ この変数の戻り値が0 試しに色々やってみました。 (1)WinXPからプリンタサーバー(OS:WinXP)  × (2)WinXPからプリンタサーバー(OS:Win2000)  ○ (3)プリンタサーバー(OS:WinXP)にアプリを ○ インストール後印刷 ※ローカルプリンタに対する印刷 うまくいかないのはプリンタサーバーがWinXPの時のみエラーが 出てしまうようです。 宜しくお願いします。

  • プリンターの設定

    EPSON PRINTER が3台あり 1台を通常使うプリンターに設定したい。 ※OKWAVEより補足:「EPSON社製品」についての質問です。

  • エクセルファイルを開くと「プリンタの設定」ダイアログが出る

    Excel2003を使用しているのですが、 あるエクセルのファイルを開こうとすると、 「プリンタの設定」ダイアログが表示されます。 ダイアログの中には、現在インストールされているプリンタの一覧が表示されていて、通常使用しているプリンタを選択してOKしても何度も聞き返されてきます。 他のファイルはこういうことを聞かれないのになぜでしょう。 そもそも出なく出来ますでしょうか。

  • プリンタのプロパティ設定について

    プリンタのプロパティ設定について お世話になっております。 プリンタの詳細設定について、お聞きしたいのですが 「スタートメニュー」→「設定」→「プリンタとFAX」→ 任意のプリンタを選択し、右クリック「プロパティ」→ ポートタブへ移動して「ポートの構成」で設定する内容は どこのファイルで情報を保持していますか? レジストリでしょうか? それともWindowsのシステムで制御している プリンタ関連の設定ファイルなどで持っているのでしょうか? それともプリンタアプリ? レジストリのHKLM\SYSTEM\ControlSet001(003)、ControlSet\Print\Printers配下は 確認しましたが、わかりませんでした。 ご存知の方がいらっしゃいましたら、具体的なファイルや レジストリを教えてほしいです。また、参考となる文献など ございましたら紹介していただきたいです。

  • プリンタ設定ユーティリティが開かずプリンター設定ができません

    色々と調べても分からなかったので質問させていただきます。 先日iBookのOSプログラムが壊れてしまったので、OSの再インストールをした所 様々なアプリケーションソフトが使えなくなってしまいました。なので、 それらの使えなくなったソフトもインストールし直していたのですが、 何故かプリンターの設定だけがうまく行きません。 マックOSX10.3.9:使用プリンターはエプソンのPX-V630 です。 ネットからドライバをダウンロードしインストールしてもパソコンに プリンターが認識されず、ならばとプリンター設定をしようとすると、 “アプリケーション printer Setup Utility は予期せぬ理由で終了しました” と 表示されてしまいます。何か解決方法はありませんでしょうか…? また、何か説明不足な点がありましたら、ご指摘ください。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Mac
  • 通常使うプリンタの設定ができない

    一台のWindows Vistaマシンを家族2人で使用しています。 そのうち1人の方で「通常使うプリンタに設定」をしても有効になりません。 普通、「通常使うプリンタに設定」をすると設定したプリンタにチェックマークがつきますが、何度やってもチャックマークが付きません。 なお、もう1人の方では有効になっています。 ちなみに、通常使うプリンタに設定されていないだけで、印刷時にプリンタを選択できるWORDのようなアプリでは選択することで問題なく印刷できます。 しかし、通常使うプリンタが設定されていないと印刷できないEXCELなどは印刷できない状況です。 何か解決策をご存じないでしょうか?

  • Illustrator CS2の用紙設定について

    Illustrator CS2をMac OS10.3.9で使用しています。 プリンタはCanonのpostscriptプリンタです。 CS2からプリントの際のダイアログが変わり、 (CSからかもしれませんが、CSは使った事がないのでわかりません) 例えば「手差し」などの指定をする際に プリントダイアログ最下段の「プリンタ」をクリックし Illustrator10までと同様のプリンタダイアログを一旦呼び出し ここで「給紙」→「手差し」と設定しなくてはならなくなりました。 質問は以下の2点です。 1)この「手差し」の設定をしてプリントプリセットとして保存し、 次のプリントの際にこのプリセットを呼び出しても、 手差しが反映されません。(毎回手差しを設定し直さなければならない) 最下段の「プリンタ」から先で設定した事は プリセットとして使用できないのでしょうか? 2)この最下段の「プリンタ」からプリンタダイアログをいじり、 元のプリンタダイアログに戻ると、ダイアログ中心付近の 「用紙」の設定が勝手に変わってしまいます。 (私の場合は「A4」だったのが、勝手に「プリンタドライバで定義」となり、 用紙の向きが 縦→横になってしまいます) 長々とすみません。 CS2になってから手間が多く、仕事に時間がかかってしまいます。 わかる方いましたら教えてください。お願いいたします。

  • プリンター未設定

    携帯iphone8と 無線LANで 印刷機と繋げたいですが、プリンターの設定ができません。アプリを入れてプリンターの設定をするのですが、プリンターが表示されません。 パソコンは繋がりましたが、iPad iPhone が繋がりません。 初歩的なことかもしれませんが、教えていただけると助かります。 ※OKWAVEより補足:「EPSON社製品」についての質問です。