2010-09-22 138 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