Has anybody been successful monitoring print spooler-Win2kXP

Just starting out? Need help? Post your questions and find answers here.
ppjm99
User
User
Posts: 23
Joined: Mon Jun 02, 2003 7:39 pm
Location: Canada

Has anybody been successful monitoring print spooler-Win2kXP

Post by ppjm99 »

Hi Folks,

I am trying to capture .spl .shd files under WinXp/2K.

I have some code I found for VB6 that uses

FindFirstPrinterChangeNotification,
FindNextPrinterChangeNotification,
and WaitForSingleObject

to monitor the print spooler.

But I would really prefer to use Purebasic.

Any help at all would be appreciated.

Thanks in advance.
ABBKlaus
Addict
Addict
Posts: 1143
Joined: Sat Apr 10, 2004 1:20 pm
Location: Germany

Post by ABBKlaus »

Hi i translated this code i found on google :

Code: Select all

; Original code found on Google search :
; http://nienie.com/~masapico/api_FindFirstPrinterChangeNotification.html
;
; Converted by ABBKlaus 11.8.2004 4:27h

#PRINTER_NOTIFY_TYPE = 0 
#JOB_NOTIFY_TYPE = 1
#PRINTER_NOTIFY_FIELD_SERVER_NAME         = $00
#PRINTER_NOTIFY_FIELD_PRINTER_NAME        = $01
#PRINTER_NOTIFY_FIELD_SHARE_NAME          = $02
#PRINTER_NOTIFY_FIELD_PORT_NAME           = $03
#PRINTER_NOTIFY_FIELD_DRIVER_NAME         = $04
#PRINTER_NOTIFY_FIELD_COMMENT             = $05
#PRINTER_NOTIFY_FIELD_LOCATION            = $06
#PRINTER_NOTIFY_FIELD_DEVMODE             = $07
#PRINTER_NOTIFY_FIELD_SEPFILE             = $08
#PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR     = $09
#PRINTER_NOTIFY_FIELD_PARAMETERS          = $0A
#PRINTER_NOTIFY_FIELD_DATATYPE            = $0B
#PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR = $0C
#PRINTER_NOTIFY_FIELD_ATTRIBUTES          = $0D
#PRINTER_NOTIFY_FIELD_PRIORITY            = $0E
#PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY    = $0F
#PRINTER_NOTIFY_FIELD_START_TIME          = $10
#PRINTER_NOTIFY_FIELD_UNTIL_TIME          = $11
#PRINTER_NOTIFY_FIELD_STATUS              = $12
#PRINTER_NOTIFY_FIELD_STATUS_STRING       = $13
#PRINTER_NOTIFY_FIELD_CJOBS               = $14
#PRINTER_NOTIFY_FIELD_AVERAGE_PPM         = $15
#PRINTER_NOTIFY_FIELD_TOTAL_PAGES         = $16
#PRINTER_NOTIFY_FIELD_PAGES_PRINTED       = $17
#PRINTER_NOTIFY_FIELD_TOTAL_BYTES         = $18
#PRINTER_NOTIFY_FIELD_BYTES_PRINTED       = $19
#PRINTER_NOTIFY_FIELD_OBJECT_GUID         = $1A
#JOB_NOTIFY_FIELD_PRINTER_NAME            = $00
#JOB_NOTIFY_FIELD_MACHINE_NAME            = $01
#JOB_NOTIFY_FIELD_PORT_NAME               = $02
#JOB_NOTIFY_FIELD_USER_NAME               = $03
#JOB_NOTIFY_FIELD_NOTIFY_NAME             = $04
#JOB_NOTIFY_FIELD_DATATYPE                = $05
#JOB_NOTIFY_FIELD_PRINT_PROCESSOR         = $06
#JOB_NOTIFY_FIELD_PARAMETERS              = $07
#JOB_NOTIFY_FIELD_DRIVER_NAME             = $08
#JOB_NOTIFY_FIELD_DEVMODE                 = $09
#JOB_NOTIFY_FIELD_STATUS                  = $0A
#JOB_NOTIFY_FIELD_STATUS_STRING           = $0B
#JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR     = $0C
#JOB_NOTIFY_FIELD_DOCUMENT                = $0D
#JOB_NOTIFY_FIELD_PRIORITY                = $0E
#JOB_NOTIFY_FIELD_POSITION                = $0F
#JOB_NOTIFY_FIELD_SUBMITTED               = $10
#JOB_NOTIFY_FIELD_START_TIME              = $11
#JOB_NOTIFY_FIELD_UNTIL_TIME              = $12
#JOB_NOTIFY_FIELD_TIME                    = $13
#JOB_NOTIFY_FIELD_TOTAL_PAGES             = $14
#JOB_NOTIFY_FIELD_PAGES_PRINTED           = $15
#JOB_NOTIFY_FIELD_TOTAL_BYTES             = $16
#JOB_NOTIFY_FIELD_BYTES_PRINTED           = $17
#PRINTER_CHANGE_ADD_PRINTER               = $00000001
#PRINTER_CHANGE_SET_PRINTER               = $00000002
#PRINTER_CHANGE_DELETE_PRINTER            = $00000004
#PRINTER_CHANGE_FAILED_CONNECTION_PRINTER = $00000008
#PRINTER_CHANGE_PRINTER                   = $000000FF
#PRINTER_CHANGE_ADD_JOB                   = $00000100
#PRINTER_CHANGE_SET_JOB                   = $00000200
#PRINTER_CHANGE_DELETE_JOB                = $00000400
#PRINTER_CHANGE_WRITE_JOB                 = $00000800
#PRINTER_CHANGE_JOB                       = $0000FF00
#PRINTER_CHANGE_ADD_FORM                  = $00010000
#PRINTER_CHANGE_SET_FORM                  = $00020000
#PRINTER_CHANGE_DELETE_FORM               = $00040000
#PRINTER_CHANGE_FORM                      = $00070000
#PRINTER_CHANGE_ADD_PORT                  = $00100000
#PRINTER_CHANGE_CONFIGURE_PORT            = $00200000
#PRINTER_CHANGE_DELETE_PORT               = $00400000
#PRINTER_CHANGE_PORT                      = $00700000
#PRINTER_CHANGE_ADD_PRINT_PROCESSOR       = $01000000
#PRINTER_CHANGE_DELETE_PRINT_PROCESSOR    = $04000000
#PRINTER_CHANGE_PRINT_PROCESSOR           = $07000000
#PRINTER_CHANGE_ADD_PRINTER_DRIVER        = $10000000
#PRINTER_CHANGE_SET_PRINTER_DRIVER        = $20000000
#PRINTER_CHANGE_DELETE_PRINTER_DRIVER     = $40000000
#PRINTER_CHANGE_PRINTER_DRIVER            = $70000000
#PRINTER_CHANGE_TIMEOUT                   = $80000000
#PRINTER_CHANGE_ALL                       = $7777FFFF
#PRINTER_ATTRIBUTE_QUEUED                 = $00000001
#PRINTER_ATTRIBUTE_DIRECT                 = $00000002
#PRINTER_ATTRIBUTE_DEFAULT                = $00000004
#PRINTER_ATTRIBUTE_SHARED                 = $00000008
#PRINTER_ATTRIBUTE_NETWORK                = $00000010
#PRINTER_ATTRIBUTE_HIDDEN                 = $00000020
#PRINTER_ATTRIBUTE_LOCAL                  = $00000040
#PRINTER_ATTRIBUTE_ENABLE_DEVQ            = $00000080
#PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS        = $00000100
#PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST      = $00000200
#PRINTER_ATTRIBUTE_WORK_OFFLINE           = $00000400
#PRINTER_ATTRIBUTE_ENABLE_BIDI            = $00000800
#PRINTER_ATTRIBUTE_RAW_ONLY               = $00001000
#PRINTER_ATTRIBUTE_PUBLISHED              = $00002000
#PRINTER_STATUS_PAUSED                    = $00000001
#PRINTER_STATUS_ERROR                     = $00000002
#PRINTER_STATUS_PENDING_DELETION          = $00000004
#PRINTER_STATUS_PAPER_JAM                 = $00000008
#PRINTER_STATUS_PAPER_OUT                 = $00000010
#PRINTER_STATUS_MANUAL_FEED               = $00000020
#PRINTER_STATUS_PAPER_PROBLEM             = $00000040
#PRINTER_STATUS_OFFLINE                   = $00000080
#PRINTER_STATUS_IO_ACTIVE                 = $00000100
#PRINTER_STATUS_BUSY                      = $00000200
#PRINTER_STATUS_PRINTING                  = $00000400
#PRINTER_STATUS_OUTPUT_BIN_FULL           = $00000800
#PRINTER_STATUS_NOT_AVAILABLE             = $00001000
#PRINTER_STATUS_WAITING                   = $00002000
#PRINTER_STATUS_PROCESSING                = $00004000
#PRINTER_STATUS_INITIALIZING              = $00008000
#PRINTER_STATUS_WARMING_UP                = $00010000
#PRINTER_STATUS_TONER_LOW                 = $00020000
#PRINTER_STATUS_NO_TONER                  = $00040000
#PRINTER_STATUS_PAGE_PUNT                 = $00080000
#PRINTER_STATUS_USER_INTERVENTION         = $00100000
#PRINTER_STATUS_OUT_OF_MEMORY             = $00200000
#PRINTER_STATUS_DOOR_OPEN                 = $00400000
#PRINTER_STATUS_SERVER_UNKNOWN            = $00800000
#PRINTER_STATUS_POWER_SAVE                = $01000000
#JOB_STATUS_PAUSED                        = $00000001
#JOB_STATUS_ERROR                         = $00000002
#JOB_STATUS_DELETING                      = $00000004
#JOB_STATUS_SPOOLING                      = $00000008
#JOB_STATUS_PRINTING                      = $00000010
#JOB_STATUS_OFFLINE                       = $00000020
#JOB_STATUS_PAPEROUT                      = $00000040
#JOB_STATUS_PRINTED                       = $00000080
#JOB_STATUS_DELETED                       = $00000100
#JOB_STATUS_BLOCKED_DEVQ                  = $00000200
#JOB_STATUS_USER_INTERVENTION_A           = $00000400
#JOB_STATUS_RESTART                       = $00000800

Structure PRINTER_NOTIFY_OPTIONS
  version.l ; Specifies the version of this structure. Set this member to 2
  flags.l   ; ?
  count.l   ; Specifies the number of elements in the pTypes array
  ptypes.l
EndStructure

Structure PRINTER_NOTIFY_OPTIONS_TYPE
  type.w      ; PRINTER_NOTIFY_TYPE / JOB_NOTIFY_TYPE
  reserved0.w ; 
  reserved1.l ; 
  reserved2.l ; 
  count.l     ; Specifies the number of elements in the pFields array
  pfields.l   ; Pointer to an array of PRINTER_NOTIFY_INFO_DATA structure
EndStructure

Structure PRINTER_NOTIFY_INFO_DATA
  type.w      ; PRINTER_NOTIFY_TYPE / JOB_NOTIFY_TYPE
  field.w     ; Indicates the field that changed
  reserved.l  ; 
  id.l        ; Indicates the job identifier if the Type member specifies JOB_NOTIFY_TYPE. If the Type member specifies PRINTER_NOTIFY_TYPE, this member is undefined
  adwData.l[2]
EndStructure

Structure PRINTER_NOTIFY_INFO
  version.l
  flags.l
  count.l
  adata.PRINTER_NOTIFY_INFO_DATA
EndStructure


OpenWindow(0,0,0,32,32,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Printer statustest")

winspool.l=OpenLibrary(#PB_ANY,"WINSPOOL.DRV")

If winspool
  ;Debug "Winspool Handle : "+Str(winspool)

  hPrinter.l
  hNotify.l
  p.l
  b.l
  pBuf.l
  adwData.l
  changereason.l

  Dim pnf.w(100)
  For i=0 To #PRINTER_NOTIFY_FIELD_OBJECT_GUID-1
    pnf(i)=i
  Next

  Dim jnf.w(100)
  For i=0 To #JOB_NOTIFY_FIELD_BYTES_PRINTED-1
    jnf(i)=i
  Next

  Dim not.PRINTER_NOTIFY_OPTIONS_TYPE(1)
  not(0)\type=#PRINTER_NOTIFY_TYPE
  not(0)\count=#PRINTER_NOTIFY_FIELD_BYTES_PRINTED
  not(0)\pfields=@pnf(0)
  not(1)\type=#JOB_NOTIFY_TYPE
  not(1)\count=#PRINTER_NOTIFY_FIELD_OBJECT_GUID
  not(1)\pfields=@jnf(0)

  no.PRINTER_NOTIFY_OPTIONS
  no\version=2
  no\count=2
  no\ptypes=@not(0)
  PName.s="TEC B-572"

  If OpenPrinter_(@PName,@hPrinter,0)<>0
    Debug "OpenPrinter success printerhandle : "+Str(hPrinter)
  Else
    Debug "OpenPrinter error : "+Str(GetLastError_())
    End
  EndIf

  hNotify=CallFunction(winspool,"FindFirstPrinterChangeNotification",hPrinter,#PRINTER_CHANGE_ALL,0,@no)
  If hNotify<>#INVALID_HANDLE_VALUE
    Debug "FindFirstPrinterChangeNotification success handle="+Str(hNotify)
  Else
    Debug "FindFirstPrinterChangeNotification error : "+Str(GetLastError_())
    End
  EndIf

  Repeat
    Event = WindowEvent()
    
    WaitForSingleObject_(hNotify,#INFINITE)
    ;Delay(100)
    no\flags=0
    b=CallFunction(winspool,"FindNextPrinterChangeNotification",hNotify,@ChangeReason,@no,@p)
    If b<>0
      Debug "FindNextPrinterChangeNotification success"
    Else
      Debug "FindNextPrinterChangeNotification error : "+Str(GetLastError_())
      End
    EndIf
    If(ChangeReason &#PRINTER_CHANGE_ADD_PRINTER):Debug "ADD Printer":EndIf
    If(ChangeReason &#PRINTER_CHANGE_SET_PRINTER):Debug "SET Printer":EndIf
    If(ChangeReason &#PRINTER_CHANGE_DELETE_PRINTER):Debug "DELETE Printer":EndIf
    If(ChangeReason &#PRINTER_CHANGE_FAILED_CONNECTION_PRINTER):Debug "Failed connection Printer":EndIf
    If(ChangeReason &#PRINTER_CHANGE_ADD_JOB):Debug "ADD Job":EndIf
    If(ChangeReason &#PRINTER_CHANGE_SET_JOB):Debug "SET Job":EndIf
    If(ChangeReason &#PRINTER_CHANGE_DELETE_JOB):Debug "DELETE Job":EndIf
    If(ChangeReason &#PRINTER_CHANGE_WRITE_JOB):Debug "WRITE Job":EndIf
    If(ChangeReason &#PRINTER_CHANGE_ADD_FORM):Debug "ADD Form":EndIf
    If(ChangeReason &#PRINTER_CHANGE_SET_FORM):Debug "SET Form":EndIf
    If(ChangeReason &#PRINTER_CHANGE_DELETE_FORM):Debug "DELETE Form":EndIf
    If(ChangeReason &#PRINTER_CHANGE_ADD_PORT):Debug "ADD Port":EndIf
    If(ChangeReason &#PRINTER_CHANGE_CONFIGURE_PORT):Debug "Configure Port":EndIf
    If(ChangeReason &#PRINTER_CHANGE_DELETE_PORT):Debug "Delete Port":EndIf
    If(ChangeReason &#PRINTER_CHANGE_ADD_PRINT_PROCESSOR):Debug "ADD Print Processor":EndIf
    If(ChangeReason &#PRINTER_CHANGE_DELETE_PRINT_PROCESSOR):Debug "DELETE Print Processor":EndIf
    If(ChangeReason &#PRINTER_CHANGE_ADD_PRINTER_DRIVER):Debug "ADD Printer Driver":EndIf
    If(ChangeReason &#PRINTER_CHANGE_SET_PRINTER_DRIVER):Debug "SET Printer Driver":EndIf
    If(ChangeReason &#PRINTER_CHANGE_DELETE_PRINTER_DRIVER):Debug "Delete Printer Driver":EndIf
    If(ChangeReason &#PRINTER_CHANGE_TIMEOUT):Debug "Timeout":EndIf
    If p<>0
      Debug "Pointer :"+Str(p)
      Debug "Version :"+Str(PeekL(p))
      Debug "Flags   :"+Str(PeekL(p+4))
      count.l=PeekL(p+8)
      Debug "Count :"+Str(count)
      If count>0:count-1:EndIf
      PNID.l=SizeOf(PRINTER_NOTIFY_INFO_DATA)
      addr.l=p+12
      For i=0 To count
        type.l=PeekW(addr+0+i*PNID)
        ;Debug Str(i)+"\adata\type    :"+Str(type)
        field.l=PeekW(addr+2+i*PNID)
        ;Debug Str(i)+"\adata\field   :"+Str(field)
        reserved.l=PeekL(addr+4+i*PNID)
        ;Debug Str(i)+"\adata\reserved:"+Str(reserved)
        id.l=PeekL(addr+8+i*PNID)
        ;Debug Str(i)+"\adata\id      :"+Str(id)
        adwdata0.l=PeekL(addr+12+i*PNID)
        ;Debug Str(i)+"\adata\adwdata0:"+Str(adwdata0)
        adwdata1.l=PeekL(addr+16+i*PNID)
        ;Debug Str(i)+"\adata\adwdata1:"+Str(adwdata1)
        pBuf=adwdata1
        Debug "Printer Notify Nr : "+Str(i+1)
        Select type
          Case #PRINTER_NOTIFY_TYPE
            Select field
              Case #PRINTER_NOTIFY_FIELD_SERVER_NAME
                Debug "Server name : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_PRINTER_NAME
                Debug "Printer name : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_SHARE_NAME
                Debug "Share name : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_PORT_NAME
                Debug "Port name : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_DRIVER_NAME
                Debug "Driver name : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_COMMENT
                Debug "Comment : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_LOCATION
                Debug "Location : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_DEVMODE
                ; DEVMODE structure
              Case #PRINTER_NOTIFY_FIELD_SEPFILE
                Debug "Sepfile : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR
                Debug "Print processor : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_PARAMETERS
                Debug "Parameters : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_DATATYPE
                Debug "Datatype : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR
                ; SECURITY DESCRIPTOR
              Case #PRINTER_NOTIFY_FIELD_ATTRIBUTES
                Debug "Attributes:"
                If(#PRINTER_ATTRIBUTE_QUEUED &adwData0):Debug "queued":EndIf
                If(#PRINTER_ATTRIBUTE_DIRECT &adwData0):Debug "direct":EndIf
                If(#PRINTER_ATTRIBUTE_DEFAULT &adwData0):Debug "default":EndIf
                If(#PRINTER_ATTRIBUTE_SHARED &adwData0):Debug "shared":EndIf
                If(#PRINTER_ATTRIBUTE_NETWORK &adwData0):Debug "network":EndIf
                If(#PRINTER_ATTRIBUTE_HIDDEN &adwData0):Debug "hidden":EndIf
                If(#PRINTER_ATTRIBUTE_LOCAL &adwData0):Debug "local":EndIf
                If(#PRINTER_ATTRIBUTE_ENABLE_DEVQ &adwData0):Debug "enable devq":EndIf
                If(#PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS &adwData0):Debug "keep printed jobs":EndIf
                If(#PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST &adwData0):Debug "do complete first":EndIf
                If(#PRINTER_ATTRIBUTE_WORK_OFFLINE &adwData0):Debug "work offline":EndIf
                If(#PRINTER_ATTRIBUTE_ENABLE_BIDI &adwData0):Debug "enable bidi":EndIf
                If(#PRINTER_ATTRIBUTE_RAW_ONLY &adwData0):Debug "raw only":EndIf
              Case #PRINTER_NOTIFY_FIELD_PRIORITY
                Debug "Priority : "+Str(adwdata0)
              Case #PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY
                Debug "Default priority : "+Str(adwdata0)
              Case #PRINTER_NOTIFY_FIELD_START_TIME
                Debug "Start time : "+Str(adwdata0)
              Case #PRINTER_NOTIFY_FIELD_UNTIL_TIME
                Debug "Until time : "+Str(adwdata0)
              Case #PRINTER_NOTIFY_FIELD_STATUS
                If(adwData0 &#PRINTER_STATUS_PAUSED):Debug "paused":EndIf
                If(adwData0 &#PRINTER_STATUS_ERROR):Debug "error":EndIf
                If(adwData0 &#PRINTER_STATUS_PENDING_DELETION):Debug "pending deletion":EndIf
                If(adwData0 &#PRINTER_STATUS_PAPER_JAM):Debug "paper jam":EndIf
                If(adwData0 &#PRINTER_STATUS_PAPER_OUT):Debug "paper out":EndIf
                If(adwData0 &#PRINTER_STATUS_MANUAL_FEED):Debug "manual feed":EndIf
                If(adwData0 &#PRINTER_STATUS_PAPER_PROBLEM):Debug "paper problem":EndIf
                If(adwData0 &#PRINTER_STATUS_OFFLINE):Debug "offline":EndIf
                If(adwData0 &#PRINTER_STATUS_IO_ACTIVE):Debug "io active":EndIf
                If(adwData0 &#PRINTER_STATUS_BUSY):Debug "busy":EndIf
                If(adwData0 &#PRINTER_STATUS_PRINTING):Debug "printing":EndIf
                If(adwData0 &#PRINTER_STATUS_OUTPUT_BIN_FULL):Debug "output bin full":EndIf
                If(adwData0 &#PRINTER_STATUS_NOT_AVAILABLE):Debug "not available":EndIf
                If(adwData0 &#PRINTER_STATUS_WAITING):Debug "waiting":EndIf
                If(adwData0 &#PRINTER_STATUS_PROCESSING):Debug "processing":EndIf
                If(adwData0 &#PRINTER_STATUS_INITIALIZING):Debug "initializing":EndIf
                If(adwData0 &#PRINTER_STATUS_WARMING_UP):Debug "warming up":EndIf
                If(adwData0 &#PRINTER_STATUS_TONER_LOW):Debug "toner low":EndIf
                If(adwData0 &#PRINTER_STATUS_NO_TONER):Debug "no toner":EndIf
                If(adwData0 &#PRINTER_STATUS_PAGE_PUNT):Debug "page punt":EndIf
                If(adwData0 &#PRINTER_STATUS_USER_INTERVENTION):Debug "user intervention":EndIf
                If(adwData0 &#PRINTER_STATUS_OUT_OF_MEMORY):Debug "out of memory":EndIf
                If(adwData0 &#PRINTER_STATUS_DOOR_OPEN):Debug "door open":EndIf
                If(adwData0 &#PRINTER_STATUS_SERVER_UNKNOWN):Debug "server unkown":EndIf
                If(adwData0 &#PRINTER_STATUS_POWER_SAVE):Debug "power save":EndIf
              Case #PRINTER_NOTIFY_FIELD_STATUS_STRING
                Debug "Status string : "+PeekS(pBuf)
              Case #PRINTER_NOTIFY_FIELD_CJOBS
                Debug "CJOBS : "+Str(adwdata0)
              Case #PRINTER_NOTIFY_FIELD_AVERAGE_PPM
                Debug "Average ppm : "+Str(adwdata0)
              Case #PRINTER_NOTIFY_FIELD_TOTAL_PAGES
                Debug "Total pages : "+Str(adwdata0)
              Case #PRINTER_NOTIFY_FIELD_PAGES_PRINTED
                Debug "Pages printed : "+Str(adwdata0)
              Case #PRINTER_NOTIFY_FIELD_TOTAL_BYTES
                Debug "Total bytes : "+Str(adwdata0)
              Case #PRINTER_NOTIFY_FIELD_BYTES_PRINTED
                Debug "Bytes printed : "+Str(adwdata0)
            EndSelect
          Case #JOB_NOTIFY_TYPE
            Select field
              Case #JOB_NOTIFY_FIELD_PRINTER_NAME
                Debug "Printer name : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_MACHINE_NAME
                Debug "Machine name : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_PORT_NAME
                Debug "Port name : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_USER_NAME
                Debug "User name : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_NOTIFY_NAME
                Debug "Notify name : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_DATATYPE
                Debug "Datatype : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_PRINT_PROCESSOR
                Debug "Print processor : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_PARAMETERS
                Debug "Parameters : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_DRIVER_NAME
                Debug "Driver name : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_DEVMODE
                ; DEVMODE
              Case #JOB_NOTIFY_FIELD_STATUS
                If(adwData0 &#JOB_STATUS_PAUSED):Debug "Paused":EndIf
                If(adwData0 &#JOB_STATUS_ERROR):Debug "Error":EndIf
                If(adwData0 &#JOB_STATUS_DELETING):Debug "Deleting":EndIf
                If(adwData0 &#JOB_STATUS_SPOOLING):Debug "Spooling":EndIf
                If(adwData0 &#JOB_STATUS_PRINTING):Debug "Printing":EndIf
                If(adwData0 &#JOB_STATUS_OFFLINE):Debug "Offline":EndIf
                If(adwData0 &#JOB_STATUS_PAPEROUT):Debug "Paperout":EndIf
                If(adwData0 &#JOB_STATUS_PRINTED):Debug "Printed":EndIf
                If(adwData0 &#JOB_STATUS_DELETED):Debug "Deleted":EndIf
                If(adwData0 &#JOB_STATUS_BLOCKED_DEVQ):Debug "Blocked devq":EndIf
                If(adwData0 &#JOB_STATUS_USER_INTERVENTION_A):Debug "User intervention":EndIf
                If(adwData0 &#JOB_STATUS_RESTART):Debug "Restart":EndIf
              Case #JOB_NOTIFY_FIELD_STATUS_STRING
                Debug "Status string : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_DOCUMENT
                Debug "Document : "+PeekS(pBuf)
              Case #JOB_NOTIFY_FIELD_PRIORITY
                Debug "Priority : "+Str(adwdata0)
              Case #JOB_NOTIFY_FIELD_POSITION
                Debug "Position : "+Str(adwdata0)
              Case #JOB_NOTIFY_FIELD_SUBMITTED
                ; SYSTEMTIME
              Case #JOB_NOTIFY_FIELD_START_TIME
                Debug "Start time : "+Str(adwdata0)
              Case #JOB_NOTIFY_FIELD_UNTIL_TIME
                Debug "Until time : "+Str(adwdata0)
              Case #JOB_NOTIFY_FIELD_TIME
                Debug "Field time : "+Str(adwdata0)
              Case #JOB_NOTIFY_FIELD_TOTAL_PAGES
                Debug "Total pages : "+Str(adwdata0)
              Case #JOB_NOTIFY_FIELD_PAGES_PRINTED
                Debug "Pages printed : "+Str(adwdata0)
              Case #JOB_NOTIFY_FIELD_TOTAL_BYTES
                Debug "Total bytes : "+Str(adwdata0)
              Case #JOB_NOTIFY_FIELD_BYTES_PRINTED
                Debug "Bytes printed : "+Str(adwdata0)
            EndSelect
        EndSelect
      Next
    EndIf
  Until Event=#PB_Event_CloseWindow
  b=CallFunction(winspool,"FreePrinterNotifyInfo",p)
  If b
    Debug "FreePrinterNotifyInfo success"
  Else
    Debug "FreePrinterNotifyInfo error : "+Str(GetLastError_())
  EndIf
  If hPrtiner<>#INVALID_HANDLE_VALUE
    b=CallFunction(winspool,"FindClosePrinterChangeNotification",hNotify)
    If b
      Debug "FindClosePrinterChangeNotification success"
    Else
      Debug "FindClosePrinterChangeNotification error : "+Str(GetLastError_())
    EndIf
    ClosePrinter_(hPrinter)
  EndIf
EndIf
ppjm99
User
User
Posts: 23
Joined: Mon Jun 02, 2003 7:39 pm
Location: Canada

Post by ppjm99 »

You (and Purebasic) Rock!!!

Sorry it took me so long to reply, I was on holidays.

Thanks so much for this.

;)
Post Reply