使用 Win32 API 將原始資料傳送到印表機

xqhrs232發表於2020-11-19

原文地址::https://docs.microsoft.com/zh-cn/troubleshoot/windows/win32/win32-raw-data-to-printer

相關文章

1、USB口的印表機接計算機,CreateFile函式的第一個引數該如何寫----https://bbs.csdn.net/topics/370169850

2、USB 用CreateFile()開啟usb裝置時,如何填寫devicepath這個值?----https://bbs.csdn.net/topics/392451132

 

文介紹如何使用 Win32 API 將原始資料傳送到印表機。

原始產品版本:  Windows API
原始 KB 數:  138594

摘要

有時,不需要將印表機特定的資料直接傳送到印表機,而是繞過驅動程式。 Win32 API 提供了它在本地和網路印表機上的工作方式。 此方法可用於替換 PASSTHROUGH SpoolFile() 在早期版本的 Windows API 中使用的轉義和方法。

程式碼示例

您可以使用以下程式碼將原始資料直接傳送到 Windows NT 或 Windows 95 中的印表機。

C++複製

// 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 使用了最新的病毒檢測軟體,該軟體在檔案釋出之日起可用。 檔案儲存在安全增強的伺服器上,可幫助防止對檔案進行任何未經授權的更改。

相關文章