HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0212
(´ω`)プリンタへのエスケープシーケンス送信6解決


(´ω`)

リンク

2013/2/12(Tue) 18:02:47|NO.52333

例えば、昔のN88-BASICなどでは、プリンタに直接エスケープシーケンスを
送信できましたよね。こんな感じに↓

10 A$="CITIZEN" 20 LPRINT CHR$(&H1D);"!";CHR$(&H11); 30 LPRINT A$; 40 LPRINT CHR$(&HA);CHR$(&HA); 50 LPRINT CHR$(&H1D);"!";CHR$(&H00); 60 LPRINT A$; 70 END
  ※シチズンのプリンタマニュアルより

でもHSPには、LPRINTに該当する命令はないですよね。
たぶん、同じことをするにはデバイスを叩いてやらにゃいかんのかなあと。
しかし、目的のプリンタのデバイスコンテキストを取得するところまではできたのですが、
いざエスケープシーケンスを送る段になって「Bitbltじゃダメじゃね?(u゚ω゚ )」と……

あと、フォントを搭載してるプリンタなら、やっぱプリンタに文字を印字させる方が
データ量少ないしきれいだよなあ、と。

以上の課題について、何らかのヒントでも結構ですので、ご教示願えたら。
よろしくお願いいたします……(;ω;)



この記事に返信する


fortunehill

リンク

2013/2/12(Tue) 22:59:53|NO.52338

/*DOS時代の記憶から最初に思いつくのがリダイレクトw*/

echo hoge > prn



(´ω`)

リンク

2013/2/12(Tue) 23:28:08|NO.52340

>echo

あっ……hspでバッチを生成して実行する手か!

fortunehill氏の着想力にはいつも感嘆いたしております。
後日試してみます、ありがとうございます!(*゚ω゚*)



(´ω`)

リンク

2013/2/14(Thu) 09:23:18|NO.52379

だめでした……(u´ω`)

というか、よく考えたらコマンドプロンプトではプリンタ制御のためのエスケープ
シーケンスが記述できないという。無理やり書いたバッチを実行しても、
エスケープ文字の部分で「○は内部コマンドちゃうで」となってしまいます。
あと、リダイレクトでプリンタのポート名を指定しても、リダイレクトして
くれないようです。

引き続き、ご教示をお待ち申し上げております……(;ω;)



f(出張前)

リンク

2013/2/14(Thu) 09:38:18|NO.52381

つーかプリンタのデバイスコンテキスト取得しても
其処から扱えるのはWindowsの機能だろうから、
今のOSじゃポートに直接データ流せないんじゃないか。

詳しくは知らないが「giveio.sys」で検索してみれば幸せになれるかもしれない。
文字通り聞いた事あるだけなので幸せにはなれないかもしれないが。



fortunehill

リンク

2013/2/15(Fri) 00:49:50|NO.52402

/*適当な事を書いた手前
 プリンタ ドライバを介さずに直接印刷スプーラと通信する方法を試して見ましたが
 家のプリンターには無視されました。 ttp://support.microsoft.com/kb/154078/ja/*/

#uselib "winspool.drv" #func GetDefaultPrinterA "GetDefaultPrinterA" sptr,sptr #func OpenPrinterA "OpenPrinterA" sptr,sptr,sptr #func ClosePrinter "ClosePrinter" sptr #func StartDocPrinterA "StartDocPrinterA" sptr,sptr,sptr #func StartPagePrinter "StartPagePrinter" sptr #func WritePrinter "WritePrinter" sptr,sptr,sptr,sptr #func EndPagePrinter "EndPagePrinter" sptr #func EndDocPrinter "EndDocPrinter" sptr sdim ss xx = 260 GetDefaultPrinterA varptr(ss),varptr(xx) :mes ss OpenPrinterA varptr(ss),varptr(hh),0 :mes hh ss = "hoge" nn = varptr(ss),0,0 StartDocPrinterA hh,1,varptr(nn) :mes stat ;spool StartPagePrinter hh :mes stat ss = "hoge\n" WritePrinter hh,varptr(ss),strlen(ss),varptr(ii) :mes stat :mes ii EndPagePrinter hh :mes stat EndDocPrinter hh :mes stat ClosePrinter hh :mes stat



(´ω`)

リンク

2013/2/15(Fri) 14:08:57|NO.52406

>giveio.sys

ググってみましたら、これはI/Oを直接叩くためのモノですね。
ちょっと幸せな気分になりつつも、コレを使うための前提の知識を仕入れるのが
これまた大変だという。

いずれ、こういうのも使いこなせるようになりたいです。
ありがとうございます、頑張ります。(;ω;)

>fortunehill氏

シチズンのプリンタで試したところ、なんか文字が出てきました!
しかも、通常の印刷では自動でシートカットが行われるはずが行われなかったので、
どうやら直叩きできてるようです!

ためしに、制御文字を含んだデータを送信したら、一部はうまく反映されました。
後はデータの作り方の問題だけっぽいです。これで、なんかええ感じにプリンタを
制御できそうです。


手取り足取りご教示いただきまして感謝しております。(*´ω`*)



ONION software Copyright 1997-2021(c) All rights reserved.