- PR -

VB.NETでのパラレルポートへの印刷について

投稿者投稿内容
おさ吉
会議室デビュー日: 2006/02/21
投稿数: 5
投稿日時: 2006-02-21 20:05
OS:Windows2000
言語:VB.NET 2003
APP:Windowsアプリ

プリンタへ制御コマンドを送りたいのですが、
VB6で開発していたときは下記のような方法で可能でした。

Dim intFileNo As Integer
intFileNo = FreeFile
Open "LPT1" For Output As #intFileNo
Print #intFileNo, Chr(27) & "W1" '制御コマンド
Print #intFileNo, "TEST" '印字文字
Close #intFileNo

VB.NETで同じようにしたとき

Dim intFileNo As Integer = FreeFile()
FileOpen(intFileNo, "LPT1", OpenMode.Output, OpenAccess.Write)
Print(intFileNo, Chr(27) & "W1") '制御コマンド
Print(intFileNo, "TEST") '印字文字
FileClose(intFileNo)

FileOpenのところでエラーとなります。

何か良い方法がございますでしょうか?
また、代替案でも構いませんので皆様のご助言を頂きたく宜しくお願い致します。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-02-22 07:26
せめてなんと言うエラーが発生したのかは書くこと。

基本的には出来るはず。これが出来ないと、シリアルポートを使ったプログラムもかけないと言う話になります。一度シリアル通信を行うサンプルを参考にしては如何でしょう?
おさ吉
会議室デビュー日: 2006/02/21
投稿数: 5
投稿日時: 2006-02-22 08:58
甕星様、早速のご返答ありがとうございます。

すみません、下記のようなエラーメッセージが表示されます。

'System.ArgumentException' のハンドルされていない例外が
microsoft.visualbasic.dll で発生しました。

追加情報 : FileStream で、ディスク パーティションおよびテープ ドライブなどの
Win32 デバイスを開くことはできません。パスに "\\\\.\\" を使用しないでください。

宜しくお願い致します。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-02-22 09:33
うろ覚えですが、「lpt1:」じゃなかったでしたっけ。
おさ吉
会議室デビュー日: 2006/02/21
投稿数: 5
投稿日時: 2006-02-22 10:03
mio様、ご返信ありがとうござます。

「lpt1:」にしてみましたが、同じエラーメッセージが表示
されました。

やはりこの方法では無理なのでしょうか?
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2006-02-22 11:00
こんにちは。

引用:

おさ吉さんの書き込み (2006-02-22 08:58) より:

追加情報 : FileStream で、ディスク パーティションおよびテープ ドライブなどの
Win32 デバイスを開くことはできません。パスに "\\\\.\\" を使用しないでください。



.NET(とくにVB.NET)について詳しくないのですが…

エラー情報を見ると
FileOpenの内部では、FileStreamクラスが使用されていて
FileStreamクラスはWin32デバイス(LPT)を開くことができない
ということなんですね。

やっぱり直接Win32APIを使うことになるんでしょうかね?
多分こんな感じ↓

コード:

Dim hLPT As System.IntPtr

' プリンタポートを開く
hLPT = CreateFile("LPT1", ...)

' プリンタポートへ出力
WriteFile(hLPT, ...)

' プリンタポートを閉じる
CloseHandle(hLPT)




#ラインプリンタの(遅い)印字が終わるまで待機したくない場合は、
 WriteFileのところでオーバーラップI/Oを使用するのがよいと思います。


[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2006-02-22 11:10 ]
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2006-02-22 11:44
こんにちは。
追記です。

引用:

Tdnr_Symの書き込み (2006-02-22 11:00) より:
やっぱり直接Win32APIを使うことになるんでしょうかね?



CodeProjectに、こんなソースコードがありました。
COM port made simple with VB.NET
ソースコードをダウンロードするとLPTクラス(LPT.vb)という、Win32APIのラッパークラスがあります。
#見た感じ、簡単に自作できそうな感じのものですが…

よろしければ、試してみてはいかがでしょう?


[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2006-02-22 11:52 ]
おさ吉
会議室デビュー日: 2006/02/21
投稿数: 5
投稿日時: 2006-02-22 12:59
Tdnr_Sym様、ご返信ありがとうございます。

CodeProjectからソースコードをダウンロードしてみました。
早速、試してみたいと思います。

スキルアップ/キャリアアップ(JOB@IT)