VB4.0でUSBポートの開き方

解決


不破  2005-11-17 20:33:35  No: 127818

開発  VB4.0
OS  Win95
プリンタ FMPR-373
現状【Open "LPT1" For Output As #20】とコマンドでLPT1ポートを開いて
プリンタに直接コマンドを送信して印刷をしているのですが,プリンタポー
トのないXPの機器を譲っていただけるので、USB-PrinterPortでつなげて
そのまま使用できるようにしたいのですが,試した所ポートを"LPT1"を開い
てもだめですし、"USB001"で開いたりしてもダメなのですがどのようにUSB
のポートを開けば印刷ができるのでしょうか?
VB4.0の時ではUSBは存在しなかったので不可能なのでしょうか?

【VB4.0_命令文サンプル】
    Open "LPT1" For Output As #20
    PRINT_LINE$ = Space(30) & "インサツマイスウ:" & Chr(10) 
    Print #20, PRINT_LINE$


K.J.K.  2005-11-17 21:04:11  No: 127819

DOS時代からの流れで通常のファイルと同じように扱うのは、
プリンタの場合はWindows95以降だと推奨されていません。

USBデバイスのファイルハンドルは開けないこともありませんが、
必ずしも使い勝手が良く汎用性のあるものにはならないので、
普通はAPI関数のOpenPrinter、StartDocPrinter、WritePrinter、
EndDocPrinter、ClosePrinterなどを組み合わせて使うことに
なります。StartDocPrinterに渡すDOC_INFO_XでpDocInfoに
"RAW"を指定すれば、バイナリの内容をそのまま送れますし。


不破  2005-11-17 23:07:31  No: 127820

K.J.Kさん  回答有難うございます

ちょっと、OpenPrinter、StartDocPrinter、WritePrinter、
EndDocPrinter、ClosePrinterの使い方が分からないのですが、
回答していただいた書き方から印刷出来そうな書き方であると
感じましたので調べさせていただきます。
また、稚拙な質問させていただくと思いますけれどもその節は
よろしくお願い致します


不破  2005-11-24 19:09:16  No: 127821

先日教えていていただいたものとは別の手法なのですが、Printer.Printと
ゆうコマンドで印刷自体はできたのですが、印刷時の修飾のコマンドを付加
して実行すると、修飾文が文字列として印刷されてしまいます。
どのようにして送れば修飾命令を有効にして印刷できるのでしょうか?
以下に現状の命令を記させていただきます。

使用PRT[FRPR-373]
           ESC/Pコマンド.使用
            倍幅拡大角指定/解除  ESC+W+Pa[マニュアル表記]
            ESC = <1B>  
            Pa,P1,P2・・・・,Pnはパラメータを示します
             ※<  >内の文字は16進表記です
         ■PGM■
           BAI_SET = Chr(&H1C) & "W" & Chr(&H1)
           BAI_OFF = Chr(&H1C) & "W" & Chr(&H0)
           S$ = BAI_SET & "農園分  納品明細表" & BAI_SET
           Printer.Print S$

         ■印刷結果■
           ". W.農園分  納品明細表. W."


K.J.K.  2005-11-24 19:21:40  No: 127822

PrinterのPrintメソッドは、引数として与えた文字列を
現在の書式・設定のままでそのまま印刷するメソッドです。

ESC/Pコマンドを送る場合は、API関数のExtEscapeを用いてください。


不破  2005-11-24 20:19:42  No: 127823

いつも、迅速な回答ありがとうございます K.J.K様

正直なところPrinter.Printを使用してしまったのはAPI関数の使い方が
よくわからないからなんです、申し訳ございません

お手数でしょうが、出来たら少し簡単なサンプルかいただけないでしょうか?
勉強不足、調査不足を棚にあげてのお願い申し訳ありませんがよろしくお願
い致します


不破  2005-11-24 20:42:34  No: 127824

VB4.0なんですがStandardEditionなんでもしかしてAPI関数のフォルダ
形成されていないのですが、もしかして使えなかったりするんでしょうか?


K.J.K.  2005-11-24 21:58:39  No: 127825

API関数を使うのには、特に必要なツールはありません。
その代わり、MSDNなどから関数や構造体、定数の定義を
引っ張ってくる必要があります。

Private Declare Function ExtEscape _
    Lib "gdi32" Alias "ExtEscape" _
(ByVal hDC As Long, ByVal Escape As Long, _
 ByVal InputLength As Long, InputData As Any, _
 ByVal OutputLength As Long, OutputData As Any) As Long

Private Const PASSTHROUGH = 19&

とでも定義できるのでは。VBから呼び出す場合、
第1引数のhDCには、Printer.hDCを、
第2引数のEscapeには、PASSTHROUGHを、
第3引数のInputLengthには送るコマンドのバイト長を、
第4引数のInputDataには、送るコマンド(Byte型の配列にする)の
先頭要素を、
第5引数のOutputLengthには0&を、
第6引数のOutputDataにはByVal 0& を設定して呼び出すことに
なるでしょう。

問題は第4引数で、
Dim abData() As Byte

ReDim abData(0 To 1) As Byte
abData(0) = Asc("W")
abData(1) = 1
としてabData(0)を渡したりするとは思いますが、そうでは
ないかも知れません。ESCを含むべきかも知れませんし、他の
手順が必要かも知れませんし。


不破  2005-11-24 23:44:13  No: 127826

いつも、御回答ありがとうございます。K.J.K.様

んっと、申し訳ありません。とりあえず印刷できるようにしようと思い
印刷のAPI関数[OpenPrinter/StartDocPrinter/WritePrinter/
EndDocPrinter/ClosePrinter]をMSDNで調べているのですが、
使い方が、わからないのです。
"gdi32"等の参照元?など構文の基本的なあたりからわからないのですが
どこか初心者てきなところから分かるようなサイトはないのでしょうか?
MSDNの構文を置き換ええようとしても、全くわかっていないのでエラーで
かえされてしまうのです
申しわけありません

MSDN[OpenPrinter]
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpgdi/html/_win32_OpenPrinter.asp


K.J.K.  2005-11-25 05:31:16  No: 127827

そのような状態だと、API関数を使うのは難しいと思いますよ。
ちなみに、VB4付属のマニュアルが一番良い参考書だったとは
思います。


不破  2005-11-26 20:35:29  No: 127828

K.J.Kさん  お世話になりました。
別の方法を探してみたところ、フリーソフトでNprAXとゆうものがあり
それをVB4.0に追加して回避することが出来ました

どうも、お世話していただきありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加