2010-09-22 136 views
0

我正在用盡想法。轉換打印機端口字節inpout32

我通過inpout32.dll的方式使用C.

我從打印機數據端口D0-7或D1-8讀取這些「字節」(例如0000,00CC)。

我需要在打印作業完成時過濾掉人類可讀的字符。

這仍然是非常原始的,但我有一個偵聽器函數使用inp32捕獲這些數據。

基本上,如果我在'Hello World'這樣的記事本中打印,將會從inp32函數讀取的字節中拉出。

打印機端口偵聽器在單獨的應用程序上。


想法是,應用程序可以在任何打印機上收聽。

它現在基本上是一個PoC。

但我現在用來測試的是佳能BJC-1000SP,它非常老,但它是我們在辦公室唯一的並行端口打印機。其他是USB類型。

我現在在Windows上使用這個。

熱敏打印機實際上是我們將要聽的。


所以現在我試圖使用允許原始文本文件打印的通用驅動程序。

如何從端口中提取文本?


如果任何人都可以給我一個想法,功能/轉換器或在哪裏搜索,那就太好了。

回答

0

如果所有讀取的內容都是人類可讀的文本,則將其全部存儲。

如果不是,則需要考慮character encoding的使用情況。如果它是普通的舊ASCII,則可以撥打isprint()來確定一個字節是否可打印字符。

上面當然假設你的打印機在說純文本,這可能意味着它必須是一個相當古老和簡單的打印機(就像大約20年前的點陣)。

如果它是一臺現代化的「Win-Printer」激光或噴墨打印機,並且所有的頁面佈局智能都是由驅動程序中的主機完成的,那麼您的運行可能會很困難。在這些情況下,傳輸的內容是頁面佈局指示,通常是打印機特定的格式。

我認爲你應該編輯你的問題,並指定你正在使用的打印機,以及你在哪個操作系統環境下運行你的程序。

更新:您目前使用的佳能BJC-1000打印機是噴墨打印機。它很可能依靠主機將數據一行一行地發送(如墨水行,而不是文本行)以控制各種墨水噴嘴。我認爲它不會向打印機發送純文本。您可以通過閱讀開源驅動程序的代碼進行調查。對於Linux,推薦的驅動程序稱爲gutenprint

+0

我正在讀的是被傳送到並行端口的數據寄存器的字節,所以它們不是人類可讀的。我也嘗試過幾種ctype函數。 所以我需要以某種方式從這些字節中提取「數據」。或者我認爲首先收集它們,因爲我仍然不確定它們是否作爲碎片傳遞給打印機。我明天再看看它。謝謝! – TRF 2010-09-22 11:33:07

+0

基本上我需要從通過數據端口傳遞的字節中提取'Hello World'文本。 – TRF 2010-09-22 11:39:24

+0

熱敏打印機怎麼樣?他們是ASCII碼嗎?基本上我們最終會使用熱敏打印機。謝謝! – TRF 2010-09-23 02:46:39