none
請問 VB.Net 要如何對 PrintPort 做寫入(列印) RRS feed

  • 問題

  • 環境:VB2008 Express + .Net Framework 3.5

     

     

    一般 POS 發票機,它沒有 driver 也不是 PnP 裝置,因此一般會以直接對 PrintPort 寫入的方式做列印。

     

    以前在 VB6 的時候可以這樣:

    Code Snippet
    Dim n As Integer
    n = FreeFile()
    Open "PRN" For Output As #n
    Print #n, "xxxxx"
    Print #n, "ooooo"
    Close #n

    即可不透過驅動程式直接對 PrintPort 做列印。

     

    但我在 VB.Net 裡這樣做:

    Code Snippet
    Dim n As Integer = FreeFile()
    FileOpen(n, "PRN", OpenMode.Output)
    PrintLine(n, "xxxxx")
    PrintLine(n, "ooooo")
    FileClose(n)

    會出現錯誤:
    「FileStream 無法開啟磁碟分割和磁帶機這類 Win32 裝置。請避免在路徑中使用 "\\.\"。」

     

    請問應該如何做才正確呢?

     

     

    謝謝唷~Smile

    2008年10月12日 上午 06:43

解答

所有回覆

  • 謝謝~ 研究中~ ^^

     

     

     

    2008年10月13日 下午 04:31
  • 感謝大大提供的資訊~

     

    我試了您提供的說明頁裡的程式碼,但遇到個問題耶:

     因為我的 POS 列印機並沒有 driver ,因此在 Windows 的「控制台」→「印表機和傳真」裡頭沒有我這台 POS 列印機,但該程式碼必須指定一台系統中的列印機。因此此法還是行不通~

     後來我用新增印表機的方式隨便從 windows 內建的印表機中安裝一台,並指定連接埠為 LPT1 ,就可以用這個程式達到直接列印 Print Port 的效果,但還是有些問題:

    列印一般的文字是OK,但若我要送出一些特殊字元碼就沒辦法耶,列印機完全沒反應,例如 Chr(&H1D)、Chr(&H56)、Chr(&H1) 等,這些是用來做特殊控制用的,例如橫向放大、粗體字、或是裁紙動作等,

     不知是否有解決辦法? 另外,不知 .Net 是否有辦法更直接的對 LPT1 做輸出,而不用裝一個假的印表機在系統中呢?

     

    謝謝唷~

     

     

     

    ps. 我的 Windwos 是 XP
    2008年10月14日 下午 12:19
  • 如果你知道該印表機的通訊協定的話可以試試直接用CreateFile開LPT來傳送資料,請參考下面網頁相關說明

     

    如何以存取藉由使用 Visual Basic . NET 序列及平行連接埠

    http://support.microsoft.com/kb/823179

    2008年10月14日 下午 12:40
    版主
  • 謝謝二位大大熱心的提供資訊~

     

    但是.....我還是覺得 .Net 裡對於這方面的事情好麻煩喔...

    最後我是用 VB6 寫一個 dll 然後到 .Net 裡參考進來呼叫

     

    目前使用狀況還不錯~結合的 VB6 的方便以及 .Net 的強大功能 Big Smile

     

     

    還是感謝大大們提供的資訊,我是覺得這些東西早晚還是要懂,但現在趕著專案的交差,等以後有空再慢慢研究了。

    謝謝囉~~ ^^

    2008年10月17日 下午 03:52