我有一台古老的POS打印机Axhiohm A470 链接。Windows 7 64位无法检测到这台打印机,驱动程序也不存在。打印(仅文本模式)的唯一方法是将打印作业直接发送到LPT。经过一番挖掘,我发现这很容易。唯一需要做的就是正确地创建文件LPT1并写入它。
#include <iostream>
#include <conio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
HANDLE hComm = CreateFileA("LPT1", GENERIC_READ | GENERIC_WRITE,
0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hComm == INVALID_HANDLE_VALUE)
return 1;
char str[] = { " Hello from your printer\n" };
DWORD bytesWritten;
unsigned char data;
BOOL nError = WriteFile(hComm, str, sizeof(str), &bytesWritten, NULL);
if (nError)
std::cout << "Data sent" << std::endl;
else
std::cout << "Failed to write data " << GetLastError() << std::endl;
_getch();
}现在我想再走一步,把印刷工作寄给第二支线。第一种是打印机内的纸卷(打印收据)。这个用上面的代码打印出来。第二个是用来放另一张收据的狭缝。我不知道怎么把打印作业寄到那里。
发布于 2014-07-01 14:03:59
正如我所发现的,这不是编程问题,而是打印机控制问题。要在Axiohm A470收据/表单验证打印机上完成表单验证,您必须发送适当的转义序列。这是我描述了如何验证表单POS卡打印和收据验证打印机的网站的链接。此外,如果您没有任何有用的驱动程序到您的打印机,并且它连接到lpt/com端口,那么向打印机发送打印作业的方法要比我上面的代码中的更简单。您甚至不必安装Windows通用/文本驱动程序。这就是我如何向打印机发送行提要的方式:
FILE * pFile;
char buffer[] = { (char)0x0a };
pFile = fopen ("c:\\test.txt", "wb");
fwrite (buffer , sizeof(char), sizeof(buffer), pFile);
fclose (pFile);
system("copy c:\\test.txt lpt1");您可能可以绕过创建文件并将文件复制到lpt1并直接打开lpt1文件。
https://stackoverflow.com/questions/23937521
复制相似问题