Win32 API を使用してプリンターに生データを送信する

この記事では、Win32 API を使用してプリンターに生データを送信する方法について説明します。

元の製品バージョン: Windows API
元の KB 番号: 138594

概要

プリンター固有のデータをプリンターに直接送信し、ドライバーをバイパスすることが必要な場合があります。 Win32 API は、ローカルプリンターとネットワークプリンターで動作する Do を提供します。 このメソッドを使用して、以前のバージョンの PASSTHROUGH Windows API で使用されているエスケープと SpoolFile() メソッドを置き換えることができます。

コード サンプル

次のコードを使用して、Windows NTまたは Windows 95 のプリンターに直接生データを送信できます。

// RawDataToPrinter - sends binary data directly to a printer
// Params:
//   szPrinterName - NULL terminated string specifying printer name
//   lpData        - Pointer to raw data bytes
//   dwCount       - Length of lpData in bytes
// Returns: TRUE for success, FALSE for failure.
BOOL RawDataToPrinter(LPSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
    HANDLE     hPrinter;
    DOC_INFO_1 DocInfo;
    DWORD      dwJob;
    DWORD      dwBytesWritten;

    // Need a handle to the printer.
    if(!OpenPrinter( szPrinterName, &hPrinter, NULL))
    return FALSE;

    // Fill in the structure with info about this "document."
    DocInfo.pDocName = "My Document";
    DocInfo.pOutputFile = NULL;
    DocInfo.pDatatype = "RAW";
    // Inform the spooler the document is beginning.
    if((dwJob = StartDocPrinter(hPrinter, 1, (LPSTR)&DocInfo)) == 0)
    {
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // Start a page.
    if(!StartPagePrinter(hPrinter))
    {
      EndDocPrinter(hPrinter);
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // Send the data to the printer.
    if(!WritePrinter(hPrinter, lpData, dwCount, &dwBytesWritten))
    {
      EndPagePrinter(hPrinter);
      EndDocPrinter(hPrinter);
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // End the page.
    if(!EndPagePrinter(hPrinter))
    {
      EndDocPrinter(hPrinter);
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // Inform the spooler that the document is ending.
    if(!EndDocPrinter(hPrinter))
    {
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // Tidy up the printer handle.
    ClosePrinter(hPrinter);
    // Check to see if correct number of bytes were written.
    if(dwBytesWritten != dwCount)
      return FALSE;
      return TRUE;
}

次のファイルは、Microsoft ダウンロード センターからダウンロードできます。

RAWPRN.EXE

Microsoft サポート ファイルをダウンロードする方法の詳細については、「オンライン サービスから Microsoft サポート ファイルを入手する方法」を参照してください。

Microsoft はこのファイルをスキャンしてウイルスを検出しました。 Microsoft では、ファイルが投稿された日付に利用可能な最新のウイルス検出ソフトウェアを使用しました。 ファイルは、ファイルに対する未承認の変更を防ぐのに役立つセキュリティ強化サーバーに格納されます。