1

私は古代のPOSプリンターAxhiohm A470 LINKを持っています。Windows 7 64bit はこのプリンターを検出せず、ドライバーも存在しません。印刷する唯一の方法 (テキスト モードのみ) は、印刷ジョブを 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();
}

ここで、さらに一歩進んで、印刷ジョブを 2 番目のフィーダーに送信します。1つ目は、プリンター内部のロール紙です(レシートを印刷します)。これは上記のコードで印刷されます。2つ目はレシートを入れるスリットです。そこに印刷ジョブを送信する方法がわかりません。

4

1 に答える 1

1

私が見つけたように、これはプログラミングの問題ではなく、プリンター制御の問題です。Axiohm A470 レシート/フォーム検証プリンターでフォーム検証を実行するには、適切なエスケープ シーケンスを送信する必要があります。これは、POS スリップおよびレシート検証プリンターでのフォーム印刷の検証方法を説明した Web サイトへのリンクです。また、プリンターに役立つドライバーがなく、それが 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ファイルを直接開くことができます。

于 2014-07-01T14:03:59.643 に答える