查看: 14  |  回复: 0
  VB6 使用 Visual Basic 中的 Win32 API 将原始数据发送到打印机(绕过打印机驱动程序)
楼主
发表于 昨天 14:18

Visual Basic 打印机对象允许通过打印机驱动程序进行打印,但有时可能需要使用 Win32 API 将信息更直接地发送到打印机。要遵循的代码示例演示如何使用绕过打印机驱动程序直接与打印后台处理程序通信的 API 函数来实现此目的。
新建From1(窗体),新建Command1(按钮CommandButton),代码:   

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 Declare Function AbortPrinter Lib "winspool.drv" (ByVal _
    hPrinter 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 = "DemoPage"
  MyDocInfo.pOutputFile = vbNullString
  MyDocInfo.pDatatype = vbNullString

  lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
  Call StartPagePrinter(lhPrinter)
  sWrittenData = "Demo of Prining API" & vbFormFeed

  lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, _
      Len(sWrittenData), lpcWritten)

  '///// Demo for Deleting spool file '////////
  If lReturn Then
    If MsgBox("Data written to the spool file." & vbCrLf & _
        "Do you want to cancel the job. " & _
        "If you press yes then it will delete the spool file." _
        , vbYesNo + vbQuestion) = vbYes Then
      
      Call AbortPrinter(lhPrinter)
      MsgBox "Job canceled and Spool file deleted", vbExclamation
    End If
  End If

  '//Cleanup
  lReturn = EndPagePrinter(lhPrinter)
  lReturn = EndDocPrinter(lhPrinter)
  lReturn = ClosePrinter(lhPrinter)
End Sub


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2025 MaNongKu.com