HOWTO: Send Raw Data to a Printer by Using the Win32 API
ID: Q138594
|
The information in this article applies to:
-
Microsoft Win32 Software Development Kit (SDK), used with:
-
Microsoft Windows NT 3.51
-
Microsoft Windows 95
-
Microsoft Windows 2000
SUMMARY
It is sometimes necessary to send printer-specific data directly to a
printer, bypassing the driver. The Win32 API provides a do it that works on
local and networked printers. This method can be used to replace the
PASSTHROUGH escape and SpoolFile() methods used in previous versions of the Windows API.
MORE INFORMATION
Sample Code
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 were written.
if( dwBytesWritten != dwCount )
return FALSE;
return TRUE;
}
REFERENCES
For additional information, please see the following article in the
Microsoft Knowledge Base:
Q154078 HOWTO: SendRaw Data to a Printer Using the Win32 API from VB
Additional query words:
RAW.DRV binary
Keywords : kbcode kbprint kbNTOS351 kbWinOS2000 kbSDKWin32 kbWinOS95 kbDSupport kbGDIFAQ
Version : WINDOWS:95
Platform : WINDOWS
Issue type : kbhowto