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.
Has anybody been successful monitoring print spooler-Win2kXP
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