The information in this article applies to:
- Microsoft Visual Basic Learning, Professional, and Enterprise Editions
for Windows, version 5.0
- Microsoft Visual Basic Standard, Professional, and Enterprise Editions,
32-bit only, for Windows, version 4.0
SUMMARY
Printing page-by-page is the Windows standard; however, it is sometimes
desirable to print to a printer line-by-line rather than page-by-page. One
advantage to printing line-by-line is that if there is a power failure
while printing, the data lost is one log item, at most. The Visual Basic
Printer object does not support this mode, but the Win32 API accomplishes
this handily.
MORE INFORMATION
This technique will work only when printing to a local line printer,
typically a dot matrix printer. Laser and Ink Jet printers are page
printers and will not print in single line mode.
- Create a new Visual Basic project and place a CommandButton on Form1.
- Add the following code to Form1:
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
Dim lhPrinter As Long
Private Sub Command1_Click()
Dim lReturn As Long
Dim lpcWritten As Long
Dim sWrittenData As String
sWrittenData = "How's that for Magic !!!!" & vbCrLf
lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, _
Len(sWrittenData), lpcWritten)
End Sub
Private Sub Form_Load()
Dim lReturn As Long
Dim lDoc As Long
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)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim lReturn As Long
lReturn = EndPagePrinter(lhPrinter)
lReturn = EndDocPrinter(lhPrinter)
lReturn = ClosePrinter(lhPrinter)
End Sub
- Make the logging printer the default and run the application. Every
time you click Command1, a line should be immediately printed to your
printer.
REFERENCES
For more information about using the Win32 API to send data directly to the
printer, please see the following article in the Microsoft Knowledge Base:
ARTICLE-ID: Q154078
Title : HOWTO: Send Raw Data to a Printer Using the Win32 API
from VB
Keywords : vb432 VB4WIN vb5all vb5howto kbprint
Version : WINDOWS:4.0,5.0
Platform : WINDOWS
Issue type : kbhowto
|