home *** CD-ROM | disk | FTP | other *** search
- You can use the following code to send raw data directly to a printer in
- Windows NT or 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 writen
- if( dwBytesWritten != dwCount )
- return FALSE;
- return TRUE;
- }
-