直接打印RAW文件到打印机(二)
来源:互联网 发布:直播电影软件 编辑:程序博客网 时间:2024/06/02 23:26
http://support.microsoft.com/kb/138594这个地址是C++的,更好
#include <Windows.h>#include <StdIO.h>// **********************************************************************// PrintError - uses printf() to display error code information// // Params:// dwError - the error code, usually from GetLastError()// lpString - some caller-defined text to print with the error info// // Returns: void// void PrintError( DWORD dwError, LPCTSTR lpString ){#define MAX_MSG_BUF_SIZE 512TCHAR *msgBuf;DWORDcMsgLen;cMsgLen = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ALLOCATE_BUFFER | 40, NULL, dwError,MAKELANGID(0, SUBLANG_ENGLISH_US), (LPTSTR) &msgBuf,MAX_MSG_BUF_SIZE, NULL );printf( TEXT("%s Error [%d]:: %s\n"), lpString, dwError, msgBuf );LocalFree( msgBuf );#undef MAX_MSG_BUF_SIZE}// end PrintError// **********************************************************************// **********************************************************************// ReadFileWithAlloc - allocates memory for and reads contents of a file// // Params:// szFileName - NULL terminated string specifying file name// pdwSize - address of variable to receive file bytes size// ppBytes - address of pointer which will be allocated and contain file bytes// // Returns: TRUE for success, FALSE for failure.//// Notes: Caller is responsible for freeing the memory using GlobalFree()// BOOL ReadFileWithAlloc( LPTSTR szFileName, LPDWORD pdwSize, LPBYTE *ppBytes ){HANDLEhFile;DWORDdwBytes;BOOLbSuccess = FALSE;// Validate pointer parametersif( ( pdwSize == NULL ) || ( ppBytes == NULL ) )return FALSE;// Open the file for readinghFile = CreateFile( szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );if( hFile == INVALID_HANDLE_VALUE ){PrintError( GetLastError(), TEXT("CreateFile()") );return FALSE;}// How big is the file?*pdwSize = GetFileSize( hFile, NULL );if( *pdwSize == (DWORD)-1 )PrintError( GetLastError(), TEXT("GetFileSize()") );else{// Allocate the memory*ppBytes = (LPBYTE)GlobalAlloc( GPTR, *pdwSize );if( *ppBytes == NULL )PrintError( GetLastError(), TEXT("Failed to allocate memory\n") );else{// Read the file into the newly allocated memorybSuccess = ReadFile( hFile, *ppBytes, *pdwSize, &dwBytes, NULL );if( ! bSuccess )PrintError( GetLastError(), TEXT("ReadFile()") );}}// Clean upCloseHandle( hFile );return bSuccess;}// End ReadFileWithAlloc// **********************************************************************// **********************************************************************// 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( LPTSTR 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 ) ){PrintError( GetLastError(), TEXT("OpenPrinter") );return FALSE;}// Fill in the structure with info about this "document."DocInfo.pDocName = TEXT("My Document");DocInfo.pOutputFile = NULL;DocInfo.pDatatype = TEXT("RAW");// Inform the spooler the document is beginning.if( (dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo )) == 0 ){PrintError( GetLastError(), TEXT("StartDocPrinter") );ClosePrinter( hPrinter );return FALSE;}// Start a page.if( ! StartPagePrinter( hPrinter ) ){PrintError( GetLastError(), TEXT("StartPagePrinter") );EndDocPrinter( hPrinter );ClosePrinter( hPrinter );return FALSE;}// Send the data to the printer.if( ! WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten ) ){PrintError( GetLastError(), TEXT("WritePrinter") );EndPagePrinter( hPrinter );EndDocPrinter( hPrinter );ClosePrinter( hPrinter );return FALSE;}// End the page.if( ! EndPagePrinter( hPrinter ) ){PrintError( GetLastError(), TEXT("EndPagePrinter") );EndDocPrinter( hPrinter );ClosePrinter( hPrinter );return FALSE;}// Inform the spooler that the document is ending.if( ! EndDocPrinter( hPrinter ) ){PrintError( GetLastError(), TEXT("EndDocPrinter") );ClosePrinter( hPrinter );return FALSE;}// Tidy up the printer handle.ClosePrinter( hPrinter );// Check to see if correct number of bytes were written.if( dwBytesWritten != dwCount ){printf( TEXT("Wrote %d bytes instead of requested %d bytes.\n"), dwBytesWritten, dwCount );return FALSE;}return TRUE;}// End RawDataToPrinter// **********************************************************************// **********************************************************************// main - entry point for this console application// // Params:// argc - count of command line arguments// argv - array of NULL terminated command line arguments//// Returns: 0 for success, non-zero for failure.// // Command line: c:\>RawPrint PrinterName FileName// sends raw data file to printer using spooler APIs// written nov 1999 jmh//int main( int argc, char* argv[] ){LPBYTEpBytes = NULL;DWORDdwSize = 0;if( argc != 3 )return printf( TEXT("Syntax: %s <PrinterName> <FileName>\n"), argv[0] );printf( TEXT("Attempting to send file [%s] to printer [%s].\n"), argv[2], argv[1] );if( ! ReadFileWithAlloc( argv[2], &dwSize, &pBytes ) )return printf( TEXT("Failed to allocate memory for and read file [%s].\n"), argv[2] );if( ! RawDataToPrinter( argv[1], pBytes, dwSize ) )printf( TEXT("Failed to send data to printer.\n") );elseprintf( TEXT("Data sent to printer.\n") );GlobalFree( (HGLOBAL)pBytes );return 0;}// end main// **********************************************************************
- 直接打印RAW文件到打印机(二)
- 直接打印RAW文件到打印机(一)
- 直接打印RAW文件到打印机
- 直接利用工具将prn文件打印到打印机的方法
- C#直接发送打印机命令到打印机及ZPL常用打印命令 - 条码打印机
- fastreport2.5中直接打印报表到打印机
- c#通过程序将文件直接送到打印机打印
- C# 直接打印指定路径文件 + 可选择指定打印机
- Java直接控制打印机打印
- Java直接控制打印机打印
- Java直接控制打印机打印
- 小技巧:不显示打印对话框直接打印网页到打印机
- fastreport2.5中直接打印报表到打印机 - 我的专栏 - CSDNBlog
- 从FORM中调用REPORT时,如何使打印结果直接输出到打印机上?
- C#控制打印机(直接发送打印机命令到打印机)
- 传送打印指令到打印机
- java打印表格到打印机
- 打印到TIFF, 图片打印机
- RJ Metrics数据分析:Google+活跃度下降
- 数据交换格式XML和JSON对比
- python 处理xml
- Acquire Basic Programming Skills
- IOS开发报错之Undefined symbols for architecture armv6
- 直接打印RAW文件到打印机(二)
- Android数据格式解析对象JSON用法
- PPT
- 【Linux文件权限管理】关于SetUID、SetGID的说明
- 如何使Android应用开机时自动启动
- Thread和Service应用场合的区别
- C#开发WAP程序
- plsql游标详解——游标中带参数和参数游标不是一回事
- 自定义控件_dialog