⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apiprinter.cls

📁 几个不错的VB例子
💻 CLS
📖 第 1 页 / 共 2 页
字号:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "ApiPrinter"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit

' ##MODULE_DESCRIPTION This class provides the properties and methods _
for a getting information about and controlling a printer or print queue.

' ##MODULE_DESCRIPTION You can use this to get information about the status _
of any of the printers installed and (subject to having access rights) to _
control that printer.

' ##ENUMERATION_DESCRIPTION Printer_Control_Commands are sent to the printer to perform actions _
that control the current printer's job(s)
Public Enum Printer_Control_Commands
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_CONTROL_PAUSE Pause the printing of the currently active job
     PRINTER_CONTROL_PAUSE = 1
     ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_CONTROL_RESUME Resume printing if paused
     PRINTER_CONTROL_RESUME = 2
     ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_CONTROL_PURGE Terminate and delete the currently printing job
     PRINTER_CONTROL_PURGE = 3
     ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_CONTROL_SET_STATUS Set the printer status for the current job
     PRINTER_CONTROL_SET_STATUS = 4
End Enum

' ##ENUMERATION_DESCRIPTION Printer_Status are the various possible states a printer can be in. Note _
that this information is provided by the printer driver and in many cases the status will always be _
"Ready" unless there is one or more jobs in error on that printer.
Public Enum Printer_Status
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_READY The printer is free and ready to print
    PRINTER_STATUS_READY = &H0
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_PAUSED Printing is paused
    PRINTER_STATUS_PAUSED = &H1
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_ERROR Printing is suspended due to a general error
    PRINTER_STATUS_ERROR = &H2
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_PENDING_DELETION Printing is suspended while a job is being deleted
    PRINTER_STATUS_PENDING_DELETION = &H4
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_PAPER_JAM Printing is suspended because there has been a paper jam
    PRINTER_STATUS_PAPER_JAM = &H8
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_PAPER_OUT Printing is suspended because the printer has run out of paper
    PRINTER_STATUS_PAPER_OUT = &H10
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_MANUAL_FEED Printing is suspended pending a manual paper feed
    PRINTER_STATUS_MANUAL_FEED = &H20
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_PAPER_PROBLEM Printing is supended due to a paper problem
    PRINTER_STATUS_PAPER_PROBLEM = &H40
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_OFFLINE The printer is off line
    PRINTER_STATUS_OFFLINE = &H80
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_IO_ACTIVE The printer is reading data from the IO port
    PRINTER_STATUS_IO_ACTIVE = &H100
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_BUSY The printer is busy
    PRINTER_STATUS_BUSY = &H200
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_PRINTING The printer is active and printing a job
    PRINTER_STATUS_PRINTING = &H400
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_OUTPUT_BIN_FULL The output tray is full and the printer has paused until it is emptied
    PRINTER_STATUS_OUTPUT_BIN_FULL = &H800
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_NOT_AVAILABLE The printer status is not known
    PRINTER_STATUS_NOT_AVAILABLE = &H1000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_WAITING The printer is waiting for a job
    PRINTER_STATUS_WAITING = &H2000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_PROCESSING The printer is active and processing a print job
    PRINTER_STATUS_PROCESSING = &H4000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_INITIALIZING The printer is initialising and not yet ready to print
    PRINTER_STATUS_INITIALIZING = &H8000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_WARMING_UP The printer is warming up and not yet ready to print
    PRINTER_STATUS_WARMING_UP = &H10000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_TONER_LOW Printing is suspended because the level of toner or ink is too low for a reasonable quality print
    PRINTER_STATUS_TONER_LOW = &H20000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_NO_TONER Printing has been suspended because the printer is out of toner or ink
    PRINTER_STATUS_NO_TONER = &H40000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_PAGE_PUNT (Win95 only) The printer is suspended while a page is deleted
    PRINTER_STATUS_PAGE_PUNT = &H80000 'win95
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_USER_INTERVENTION The printer has been paused by the user intervention
    PRINTER_STATUS_USER_INTERVENTION = &H100000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_OUT_OF_MEMORY Printing is suspended because the printer has run out of memory
    PRINTER_STATUS_OUT_OF_MEMORY = &H200000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_DOOR_OPEN Printing is supended because a door on the printer is open
    PRINTER_STATUS_DOOR_OPEN = &H400000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_SERVER_UNKNOWN Printing is suspended due to an unknown server error
    PRINTER_STATUS_SERVER_UNKNOWN = &H800000
    ' ##ENUMERATION_MEMBER_DESCRIPTION PRINTER_STATUS_POWER_SAVE The printer is suspended in power saving mode
    PRINTER_STATUS_POWER_SAVE = &H1000000
End Enum

Public Enum Printer_Attributes
     PRINTER_ATTRIBUTE_QUEUED = &H1
     PRINTER_ATTRIBUTE_DIRECT = &H2
     PRINTER_ATTRIBUTE_DEFAULT = &H4
     PRINTER_ATTRIBUTE_SHARED = &H8
     PRINTER_ATTRIBUTE_NETWORK = &H10
     PRINTER_ATTRIBUTE_HIDDEN = &H20
     PRINTER_ATTRIBUTE_LOCAL = &H40
     PRINTER_ATTRIBUTE_ENABLE_DEVQ = &H80
     PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS = &H100
     PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST = &H200
     PRINTER_ATTRIBUTE_WORK_OFFLINE = &H400
     PRINTER_ATTRIBUTE_ENABLE_BIDI = &H800
     PRINTER_ATTRIBUTE_RAW_ONLY = &H1000
     PRINTER_ATTRIBUTE_PUBLISHED = &H2000
End Enum

Private Type PRINTER_INFO_1
    flags As Long
    pDescription As String
    pName As String
    pComment As String
End Type

Private Type PRINTER_INFO_2
    pServerName As String
    pPrinterName As String
    pShareName As String
    pPortName As String
    pDriverName As String
    pComment As String
    pLocation As String
    pDevMode As Long 'LPDEVMODEA
    pSepFile As String
    pPrintProcessor As String
    pDatatype As String
    pParameters As String
    pSecurityDescriptor As Long 'PSECURITY_DESCRIPTOR
    Attributes As Long
    Priority As Long
    DefaultPriority As Long
    StartTime As Long
    UntilTime As Long
    Status As Long
    JobsCount As Long
    AveragePPM As Long
End Type


Private Type PRINTER_INFO_3
    pSecurityDescriptor As Long 'PSECURITY_DESCRIPTOR
End Type

Private Type PRINTER_INFO_4
    pPrinterName As String
    pServerName As String
    Attributes As Long
End Type

Private Type PRINTER_INFO_5
    pPrinterName As String
    pPortName As String
    Attributes As Long
    DeviceNotSelectedTimeout As Long
    TransmissionRetryTimeout As Long
End Type

Private Type PRINTER_INFO_6
    dwStatus As Long
End Type

Private Type PRINTER_INFO_7
    pszObjectGUID As String
    dwAction As Long
End Type

Private Type PRINTER_INFO_8
    pDevMode As Long 'DEVMODE
End Type

'api calls...

Private Declare Function SetPrinterApi Lib "winspool.drv" Alias "SetPrinterA" (ByVal hPrinter As Long, _
                                                                                     ByVal Level As Long, _
                                                                                     buffer As Any, _
                                                                                     ByVal command As Long) As Long
                                                                                     
                                                                                     
    
'Aliased api calls....
Private Declare Function GetPrinterApi Lib "winspool.drv" Alias _
                           "GetPrinterA" (ByVal hPrinter As Long, _
                                            ByVal Level As Long, _
                                            buffer As Long, _
                                            ByVal pbSize As Long, _
                                            pbSizeNeeded As Long) As Long


Private Type DEVMODE
    dmDeviceName As String * 32
    dmSpecVersion As Integer
    dmDriverVersion As Integer
    dmSize As Integer
    dmDriverExtra As Integer
    dmFields As Long
    dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
    dmScale As Integer
    dmCopies As Integer
    dmDefaultSource As Integer
    dmPrintQuality As Integer
    dmColor As Integer
    dmDuplex As Integer
    dmYResolution As Integer
    dmTTOption As Integer
    dmCollate As Integer
    dmFormName As String * 32
    dmUnusedPadding As Integer
    dmBitsPerPixel As Integer
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
    ' The following only appear in Windows 95, 98, 2000
    dmICMMethod As Long
    dmICMIntent As Long
    dmMediaType As Long
    dmDitherType As Long
    dmReserved1 As Long
    dmReserved2 As Long
    ' The following only appear in Windows 2000
    dmPanningWidth As Long
    dmPanningHeight As Long
End Type

Private Type PRINTER_DEFAULTS
  pDatatype As String
  pDevMode As DEVMODE
  DesiredAccess As Long
End Type

Private Declare Function OpenPrinter Lib "winspool.drv" _
        Alias "OpenPrinterA" (ByVal pPrinterName As String, _
        phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long

Private Declare Function ClosePrinter Lib "winspool.drv" _
        (ByVal hPrinter As Long) As Long


'\\ Printer handle....
Private mhPrinter As Long

'\\ Private member variables for simplicity sake....
Private mPRINTER_INFO_1 As PRINTER_INFO_1
Private mPRINTER_INFO_2 As PRINTER_INFO_2
Private mPRINTER_INFO_3 As PRINTER_INFO_3
Private mPRINTER_INFO_4 As PRINTER_INFO_4
Private mPRINTER_INFO_5 As PRINTER_INFO_5
Private mPRINTER_INFO_6 As PRINTER_INFO_6
Private mPRINTER_INFO_7 As PRINTER_INFO_7
Private mPRINTER_INFO_8 As PRINTER_INFO_8
Private mPRINTER_INFO_9 As PRINTER_INFO_8 'currently this structure is identical 9 and 8

'\\ Declaration to enumerate the active jobs on this printer
Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" _
                          (ByVal hPrinter As Long, _
                           ByVal FirstJob As Long, _
                           ByVal NoJobs As Long, _
                           ByVal Level As Long, _
                           pJob As Long, _
                           ByVal cdBuff As Long, _
                           pcbNeeded As Long, _
                           pcBytesReturned As Long) As Long
                           
'\\ To get a printer's device context....
Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As DEVMODE) As Long
Private Declare Function CreateDCByLong Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As Long

Private Property Get Attributes() As Long

Call RefreshPrinterInfo(2)
Attributes = mPRINTER_INFO_2.Attributes

End Property

Public Property Get AveragePagesPerMonth() As Long

Call RefreshPrinterInfo(2)
AveragePagesPerMonth = mPRINTER_INFO_2.AveragePPM

End Property

Public Property Get Comment() As String

Call RefreshPrinterInfo(1)
Comment = mPRINTER_INFO_1.pComment

End Property

Public Property Get DataType() As String

Call RefreshPrinterInfo(2)
DataType = mPRINTER_INFO_2.pDatatype

End Property

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -