[AccessD] Printing from AXP where printer is elsewhere

MartyConnelly martyconnelly at shaw.ca
Mon Feb 13 15:39:45 CST 2006


Lets say this maybe difficult but not impossible.
The key thing is not all printer drivers play nice and may not give you 
the error codes you are hoping for.
You cannot directly connect to the hardware and must use the printer 
driver for information.
The drivers error's reporting back could  "Unknown" or "Other" when the 
printer consoles display "Paper Jam"
etc.
You could  look at the print queue and gather information there to see 
if job has finished.
But this means constant polling of the printer or using event methods.
But the print queue does not track finished jobs.
Also your user app may not run with sufficient OS permissions.

These guys at Merrion  used to have a lot of info about VB using above 
methods
but they have moved on to dotNet and the info is bit harder to get
The info  was moved to this Yahoo Group
Look at printer status

http://www.merrioncomputing.com/Programming/PrintStatus.htm

Have a look at the sample files here and the archives of  their message 
lists
http://groups.yahoo.com/group/MerrionComputing/messages
http://groups.yahoo.com/group/MerrionComputing/files/

Printer Queue Watch Docs
http://groups.yahoo.com/group/MerrionComputing/files/PrinterQueueWatch%20Help/


You might get away with some of these WMI routines if your drivers are 
WMI compatible

Sub lookupprinters()

On Error Resume Next
strComputer = "."
Set objWMIservice = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIservice.ExecQuery("Select * from Win32_Printer", , 48)
For Each objitem In colItems
    Debug.Print "Attributes: " & objitem.Attributes
    Debug.Print "Availability: " & objitem.Availability
    Debug.Print "AveragePagesPerMinute: " & objitem.AveragePagesPerMinute
    Debug.Print "Capabilities: " & CLng(objitem.Capabilities(0))
    Debug.Print "CapabilityDescriptions: " & 
objitem.CapabilityDescriptions(0)
    Debug.Print "Caption: " & objitem.Caption
    Debug.Print "ConfigManagerErrorCode: " & objitem.ConfigManagerErrorCode
    Debug.Print "ConfigManagerUserConfig: " & 
objitem.ConfigManagerUserConfig
    Debug.Print "CreationClassName: " & objitem.CreationClassName
    Debug.Print "DefaultPriority: " & objitem.DefaultPriority
    Debug.Print "Description: " & objitem.Description
    Debug.Print "DetectedErrorState: " & objitem.DetectedErrorState
    Debug.Print "DeviceID: " & objitem.DeviceID
    Debug.Print "DriverName: " & objitem.DriverName
    Debug.Print "ErrorCleared: " & objitem.ErrorCleared
    Debug.Print "ErrorDescription: " & objitem.ErrorDescription
    Debug.Print "HorizontalResolution: " & objitem.HorizontalResolution
   ' Debug.Print "InstallDate: " & CDate(objitem.InstallDate)
   'null check above
    Debug.Print "JobCountSinceLastReset: " & objitem.JobCountSinceLastReset
    Debug.Print "LanguagesSupported: " & objitem.LanguagesSupported
    Debug.Print "LastErrorCode: " & objitem.LastErrorCode
    Debug.Print "Location: " & objitem.Location
    Debug.Print "Name: " & objitem.Name
    Debug.Print "PaperSizesSupported: " & objitem.PaperSizesSupported(0)
    Debug.Print "PNPDeviceID: " & objitem.PNPDeviceID
    Debug.Print "PortName: " & objitem.PortName
    Debug.Print "PowerManagementCapabilities: " & 
objitem.PowerManagementCapabilities
    Debug.Print "PowerManagementSupported: " & 
objitem.PowerManagementSupported
    Debug.Print "PrinterPaperNames: " & objitem.PrinterPaperNames(0)
    Debug.Print "PrinterState: " & objitem.PrinterState
    Debug.Print "PrinterStatus: " & objitem.PrinterStatus
    Debug.Print "PrintJobDataType: " & objitem.PrintJobDataType
    Debug.Print "PrintProcessor: " & objitem.PrintProcessor
    Debug.Print "SeparatorFile: " & objitem.SeparatorFile
    Debug.Print "ServerName: " & objitem.ServerName
    Debug.Print "ShareName: " & objitem.ShareName
    Debug.Print "SpoolEnabled: " & objitem.SpoolEnabled
   ' Debug.Print "StartTime: " & CDate(objitem.StartTime)
   ' 'null check above
    Debug.Print "Status: " & objitem.Status
    Debug.Print "StatusInfo: " & objitem.StatusInfo
    Debug.Print "SystemCreationClassName: " & 
objitem.SystemCreationClassName
    Debug.Print "SystemName: " & objitem.SystemName
    'Debug.Print "TimeOfLastReset: " & CDate(objitem.TimeOfLastReset)
     'null check above
    Debug.Print "UntilTime: " & objitem.UntilTime
    Debug.Print "VerticalResolution: " & objitem.VerticalResolution
Next
Set colItems1 = objWMIservice.ExecQuery("Select * from Win32_Printer", , 48)
For Each objitem In colItems1
 Debug.Print "Attributes: " & objitem.Attributes
 Debug.Print "Attributes: " & objitem.Name
Next
End Sub

Sub liststatus()
strComputer = "."
Set objWMIservice = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMIservice. _
    ExecNotificationQuery("Select * from __instancemodificationevent " _
        & "within 30 where TargetInstance isa 'Win32_Printer'")
I = 0
Do While I = 10
    Set objprinter = colPrinters.NextEvent
    If objprinter.TargetInstance.PrinterStatus <> _
        objprinter.PreviousInstance.PrinterStatus Then
        Select Case objprinter.TargetInstance.PrinterStatus
            Case 1
            strCurrentState = "Other"
            Case 2
            strCurrentState = "Unknown"
            Case 3
            strCurrentState = "Idle"
            Case 4
            strCurrentState = "Printing"
            Case 5
            strCurrentState = "Warming Up"
        End Select
        Select Case objprinter.PreviousInstance.PrinterStatus
            Case 1
            strPreviousState = "Other"
            Case 2
            strPreviousState = "Unknown"
            Case 3
            strPreviousState = "Idle"
            Case 4
            strPreviousState = "Printing"
            Case 5
            strPreviousState = "Warming Up"
        End Select
        Debug.Print objprinter.TargetInstance.Name _
            & " is " & strCurrentState _
                & ". The printer previously was " & strPreviousState & "."
    End If
    I = I + 1
Loop



End Sub

Sub testprt()
Dim objWMIservice As Object
Dim colInstalledPrinters As Object
Dim objprinter As Variant
Dim strComputer As String
'printer codes
'http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_printer.asp
'Set objWMIservice = _
'GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
strComputer = "."
Set objWMIservice = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

 
' Grab the list of printers in the colInstallPrinters list.
Set colInstalledPrinters = objWMIservice.ExecQuery("Select * from 
Win32_Printer ")


' Run through the printer collection.
For Each objprinter In colInstalledPrinters
        Debug.Print objprinter.Name
    If objprinter.Status = "Error" Then
         Debug.Print "Detected Printer error" & objprinter.Name
        Debug.Print "DetectedErrorState - " & objprinter.DetectedErrorState
        Debug.Print "ExtendedDetectedErrorState - " & _
objprinter.ExtendedDetectedErrorState
        Debug.Print "PrinterStatus - " & objprinter.PrinterStatus
        Debug.Print "ExtendedPrinterStatus - " & _
objprinter.ExtendedPrinterStatus
    End If
Next


Set colInstalledPrinters = Nothing
Set objWMIservice = Nothing


End Sub


Johncliviger at aol.com wrote:

>Hi all
>I'm printing documents from AXP using cmd_Onclick to drive a report and all  
>is fine. That is until the printer elsewhere in the building cocks it up and 
>we  need a re-print. How can I know sat at my AXP workstation that the document 
>has  fails to print?
> 
>TIA
> 
>john c 
>  
>

-- 
Marty Connelly
Victoria, B.C.
Canada






More information about the AccessD mailing list