You are currently offline, waiting for your internet to reconnect

How To Send Raw Data to a Printer Using the Win32 API from Visual Basic

This article was previously published under Q154078
SUMMARY
The Visual Basic Printer object allows for printing through printer drivers, but there may be times when it is desirable to use the Win32 API to send information more directly to the printer. The code sample to follow shows how to achieve this by using API functions that bypass printer drivers to communicate directly with the print spooler.
MORE INFORMATION
  1. Start a new project in Visual Basic. Form1 is created by default.
  2. Place a Command Button on the form.
  3. Add the following code to the Form1 code window:
          Option Explicit      Private Type DOCINFO          pDocName As String          pOutputFile As String          pDatatype As String      End Type      Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal _         hPrinter As Long) As Long      Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal _         hPrinter As Long) As Long      Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal _         hPrinter As Long) As Long      Private Declare Function OpenPrinter Lib "winspool.drv" Alias _         "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _          ByVal pDefault As Long) As Long      Private Declare Function StartDocPrinter Lib "winspool.drv" Alias _         "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _         pDocInfo As DOCINFO) As Long      Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal _         hPrinter As Long) As Long      Private Declare Function WritePrinter Lib "winspool.drv" (ByVal _         hPrinter As Long, pBuf As Any, ByVal cdBuf As Long,  _         pcWritten As Long) As Long      Private Sub Command1_Click()          Dim lhPrinter As Long          Dim lReturn As Long          Dim lpcWritten As Long          Dim lDoc As Long          Dim sWrittenData As String          Dim MyDocInfo As DOCINFO          lReturn = OpenPrinter(Printer.DeviceName, lhPrinter, 0)          If lReturn = 0 Then              MsgBox "The Printer Name you typed wasn't recognized."              Exit Sub          End If          MyDocInfo.pDocName = "AAAAAA"          MyDocInfo.pOutputFile = vbNullString          MyDocInfo.pDatatype = vbNullString          lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)          Call StartPagePrinter(lhPrinter)          sWrittenData = "How's that for Magic !!!!" & vbFormFeed          lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, _             Len(sWrittenData), lpcWritten)          lReturn = EndPagePrinter(lhPrinter)          lReturn = EndDocPrinter(lhPrinter)          lReturn = ClosePrinter(lhPrinter)      End Sub						
REFERENCES
The Win32 SDK Help files give a more detailed description of the APIs usedin the sample.

For information on the same procedure for VC++, please see the followingarticle in the Microsoft Knowledge Base:
138594 : How To Send Raw Data to a Printer by Using the Win32 API
raw receipt
Properties

Article ID: 154078 - Last Review: 08/30/2004 22:05:00 - Revision: 2.2

  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
  • kbhowto kbprint kbapi KB154078
Feedback