如何: 通过使用 Win32 API 将原始数据发送到打印机

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 138594
概要
有时需要将打印机特定数据直接发送到打印机,绕过驱动程序。Win32 API 提供了一个本地和网络打印机都可实现它的途径.此方法可用于替换的直通转义和使用以前版本的 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 下载中心下载:

发布日期: 2000 年 2 月 10 日

有关如何下载 Microsoft 支持文件的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591 如何从在线服务获得 Microsoft 支持文件
微软已对此文件进行病毒扫描。Microsoft 使用该文件投递日期时可用的最新的病毒检测软件。该文件存储在安全增强型服务器上,以防止对文件进行任何未经授权的更改。

参考
有关其他信息,请参阅下面 Microsoft 知识库中相应的文章:
154078 如何: 使用 Win32 API 从 VB 在打印机的 SendRaw 数据
原始的 RAWPRN。DRV 二进制文件

警告:本文已自动翻译

属性

文章 ID:138594 - 上次审阅时间:09/27/2015 05:13:00 - 修订版本: 4.0

  • kbdownload kbcode kbFAQ kbhowto kbprint kbmt KB138594 KbMtzh
反馈