2011年09月07日 備忘録
当方は一切保障は致しません。責任も負いません。
ご利用は自己責任でお願いいたします。
勝手な思い込みによる誤記もあるかと思いますがその点はご容赦ください。
東芝(TOSHIBA)ラベルプリンタ TEC B-EV4-T ステータス取得
まずプリンタプロパティを確認します。
ポートは双方向サポートを有効にする
【ツール】【動作】【プリンタコマンド送信】
【プリンタコマンド送信】【{WS|}】【クエリ】
クエリに対するプリンタからの応答
ここまでがドライバ経由のステータス取得です。
いろいろ実験してみました。 | |
Com(RS232c) | 通信設定(Com)(b-ev4SettingTool_v017.exe) 設定画面 オープン コマンド送信({WS|}) 受信 クローズ |
Lan(Winsok) | 通信設定(Lan)(b-ev4SettingTool_v017.exe) 設定画面 接続先ホスト名(IPアドレス) 接続先ポート番号(8000) メッセージ({WS|}) タイマー(100msec) 受信バイト数(13) 受信データ |
上記2点は私が通常USBポートにプリンタが接続してあるので、 別通信手段によるステータス取得です。 しかしマルチポートのプリンタですがコマンドを 受信したポートにアンサーがあるようです。 以下がUSBポートからのステータス取得トライです。 |
|
APIによるOpenPrinter 【失敗例】 |
@r1=OpenPrinter("TEC B-EV4-T",hPrinter,0&)'プリンタのハンドル '"USB002"も試しましたが失敗 Ar2=StartDocPrinter(hPrinter,1,MyDocInfo)'印刷スプーラに通知 Br3=WritePrinter(hPrinter, Wbuf(0),UBound(Wbuf)+1,pcWritten) 'プリンタにデータを書き込むよう印刷スプーラに通知 'スプーラにたまったのを確認 B_1'r4=EndPagePrinter(hPrinter) B_2'r5=EndDocPrinter(hPrinter)'スプールが消える Cr6 = ReadPrinter(hPrinter, VarPtr(Rbuf(0)), 255, pNoBytesRead) 'プリンタからデータを取得 'ReadPrinter 関数は、プリンタが双方向でないときはエラーが返る。 'B_1とB_2を追加するとCでエクセルが強制終了する?? Dr7 = ClosePrinter(hPrinter) スプーラー経由ではコマンドを送信して ステータスが取得できないということが分かりました。 的外れな発送でした・・・ |
レジストリから ポート名を抽出して CreateFile WriteFile ReadFile CloseHandle 【検証中 ! 】 印刷中や スプール中の 確認はしていません。 |
CreateFileに渡すポート名が"COM1:"や"LPT1:"のように "TEC B-EV4-T"や"USB002"でオープンできるかと思いきや全く反応せず・・・ そこで Excel HID USB PICのデバイスオープン手続きを見ましたら \\?\hid#vid_04d8&pid_003c#8&be438f4&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030} ずいぶん長い名前ということに気がつきAPIを探しましたが HHidD_GetHidGuidのように使えそうなgetusbguid的APIが見つかりませんでした。 (HIDの時は簡単に見つかりましたが、今回は検索努力が足りないかも・・・) (getusbguidをググっていたら英語サイトにはあったようだけどAPIではなさそう?) そこでレジストリの中を検索していたら##?#hid#vid_04d8&pid_003c・・・を見つけました。 ##?#を\\?\に変換してやればよさそうです。 当方動作環境WinXp_SP3 Execel2002_SP3 Win7検証はこちら 参考ソフト009.lzh(20.1 KB) レジストリ検索.batは reg queryを使ってaaa.txtへリダイレクトするバッチファイルです。 デバイスマネージャー/USB 印刷サポート/デバイス インスタンス ID 私の環境の場合USBデバイスはVID=08A6(TEC) PID=0051(B-EV4-T)がUSB002のようです。 (補足:参照) aaa.txtの中身をエディタで USB\VID_08A6&PID_0051\000001を検索してみると @HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\ {28d78fad-5a12-11d1-ae5b-0000f803a8c2}\ ##?#USB#Vid_08a6&Pid_0051#000001#{28d78fad-5a12-11d1-ae5b-0000f803a8c2} DeviceInstance REG_SZ USB\Vid_08a6&Pid_0051\000001 AHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\ {a5dcbf10-6530-11d2-901f-00c04fb951ed}\ ##?#USB#Vid_08a6&Pid_0051#000001#{a5dcbf10-6530-11d2-901f-00c04fb951ed} DeviceInstance REG_SZ USB\Vid_08a6&Pid_0051\000001 二つ検索できました。 USB\VID_08A6&PID_0051\000001をレジストリ検索するのがプリンタステータス.xlsです。 大文字、小文字対策と ##?#を\\?\に変換しています。 私の環境の場合ポート名が二つ検出できています。 どちらもステータス取得ができています。 理由は良く分かりません。 ご教示願える方よろしくお願いいたします。 レジストリから探すよりもっと良い方法があるかも知れません。 (RegOpenKeyEx RegQueryValueExstr RegCloseKeyは後日の宿題とします。) またバグ情報や動作レポートなども歓迎です。 hide.oguraあnifty.com |