> >*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* >*-- GetPrinterStatus >*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* >LPARAMETERS tcPrinterName > >*-- Printer status flags used with PRINTER_INFORMATION_2 >#DEFINE cnPRINTER_STATUS_READY 0x00000000 >#DEFINE cnPRINTER_STATUS_PAUSED 0x00000001 >#DEFINE cnPRINTER_STATUS_ERROR 0x00000002 >#DEFINE cnPRINTER_STATUS_PENDING_DELETION 0x00000004 >#DEFINE cnPRINTER_STATUS_PAPER_JAM 0x00000008 >#DEFINE cnPRINTER_STATUS_PAPER_OUT 0x00000010 >#DEFINE cnPRINTER_STATUS_MANUAL_FEED 0x00000020 >#DEFINE cnPRINTER_STATUS_PAPER_PROBLEM 0x00000040 >#DEFINE cnPRINTER_STATUS_OFFLINE 0x00000080 >#DEFINE cnPRINTER_STATUS_IO_ACTIVE 0x00000100 >#DEFINE cnPRINTER_STATUS_BUSY 0x00000200 >#DEFINE cnPRINTER_STATUS_PRINTING 0x00000400 >#DEFINE cnPRINTER_STATUS_OUTPUT_BIN_FULL 0x00000800 >#DEFINE cnPRINTER_STATUS_NOT_AVAILABLE 0x00001000 >#DEFINE cnPRINTER_STATUS_WAITING 0x00002000 >#DEFINE cnPRINTER_STATUS_PROCESSING 0x00004000 >#DEFINE cnPRINTER_STATUS_INITIALIZING 0x00008000 >#DEFINE cnPRINTER_STATUS_WARMING_UP 0x00010000 >#DEFINE cnPRINTER_STATUS_TONER_LOW 0x00020000 >#DEFINE cnPRINTER_STATUS_NO_TONER 0x00040000 >#DEFINE cnPRINTER_STATUS_PAGE_PUNT 0x00080000 >#DEFINE cnPRINTER_STATUS_USER_INTERVENTION 0x00100000 >#DEFINE cnPRINTER_STATUS_OUT_OF_MEMORY 0x00200000 >#DEFINE cnPRINTER_STATUS_DOOR_OPEN 0x00400000 >#DEFINE cnPRINTER_STATUS_SERVER_UNKNOWN 0x00800000 >#DEFINE cnPRINTER_STATUS_POWER_SAVE 0x01000000 > > >DECLARE INTEGER GetPrinter IN winspool.drv AS GetPrinterA INTEGER hPrinter, INTEGER Lvl, STRING @pPrinter, INTEGER cbBuf, INTEGER @pcbNeeded >DECLARE INTEGER OpenPrinter IN winspool.drv AS OpenPrinterA STRING pPrinterName, INTEGER @phPrinter, INTEGER pDefault >DECLARE INTEGER ClosePrinter IN winspool.drv AS ClosePrinterA INTEGER hPrinter > >LOCAL lcPrinterInfo >LOCAL lcPrinterStatus > >LOCAL lnResult >LOCAL lnPrinterStatus >LOCAL lnHandle >LOCAL lnBufferSize >LOCAL lnBytesUsed > >WITH THIS > lcPrinterStatus = '' > lnHandle = 0 > > lnResult = OpenPrinterA(tcPrinterName, @lnHandle, 0) > > IF lnResult # 0 > lnBufferSize = 4096 > lcPrinterInfo = REPLICATE(CHR(0), lnBufferSize) > > lnResult = GetPrinterA(lnHandle, 2, @lcPrinterInfo, lnBufferSize, @lnBytesUsed) > > IF lnResult # 0 > > lnPrinterStatus = INT(Buf2DWord(SUBSTR(lcPrinterInfo, cnPRINTER_STATUS_OFFSET, 4))) > > DO CASE > CASE lnPrinterStatus = cnPRINTER_STATUS_READY > lcPrinterStatus = 'Ready' > > CASE lnPrinterStatus = cnPRINTER_STATUS_PAUSED > lcPrinterStatus = 'Paused' > > CASE lnPrinterStatus = cnPRINTER_STATUS_ERROR > lcPrinterStatus = 'Error' > > CASE lnPrinterStatus = cnPRINTER_STATUS_PENDING_DELETION > lcPrinterStatus = 'Deleting...' > > CASE lnPrinterStatus = cnPRINTER_STATUS_PAPER_JAM > lcPrinterStatus = 'Paper Jam' > > CASE lnPrinterStatus = cnPRINTER_STATUS_PAPER_OUT > lcPrinterStatus = 'Paper Out' > > CASE lnPrinterStatus = cnPRINTER_STATUS_MANUAL_FEED > lcPrinterStatus = 'Manual Feed Required' > > CASE lnPrinterStatus = cnPRINTER_STATUS_PAPER_PROBLEM > lcPrinterStatus = 'Paper Problem' > > CASE lnPrinterStatus = cnPRINTER_STATUS_OFFLINE > lcPrinterStatus = 'Offline' > > CASE lnPrinterStatus = cnPRINTER_STATUS_IO_ACTIVE > lcPrinterStatus = 'Downloading Job' > > CASE lnPrinterStatus = cnPRINTER_STATUS_BUSY > lcPrinterStatus = 'Busy' > > CASE lnPrinterStatus = cnPRINTER_STATUS_PRINTING > lcPrinterStatus = 'Printing' > > CASE lnPrinterStatus = cnPRINTER_STATUS_OUTPUT_BIN_FULL > lcPrinterStatus = 'Output Bill Full' > > CASE lnPrinterStatus = cnPRINTER_STATUS_NOT_AVAILABLE > lcPrinterStatus = 'Not Available' > > CASE lnPrinterStatus = cnPRINTER_STATUS_WAITING > lcPrinterStatus = 'Waiting' > > CASE lnPrinterStatus = cnPRINTER_STATUS_PROCESSING > lcPrinterStatus = 'Processing Job' > > CASE lnPrinterStatus = cnPRINTER_STATUS_INITIALIZING > lcPrinterStatus = 'Initializing' > > CASE lnPrinterStatus = cnPRINTER_STATUS_WARMING_UP > lcPrinterStatus = 'Warming Up' > > CASE lnPrinterStatus = cnPRINTER_STATUS_TONER_LOW > lcPrinterStatus = 'Toner Low' > > CASE lnPrinterStatus = cnPRINTER_STATUS_NO_TONER > lcPrinterStatus = 'Toner Out' > > CASE lnPrinterStatus = cnPRINTER_STATUS_PAGE_PUNT > lcPrinterStatus = 'Page too Complex' > > CASE lnPrinterStatus = cnPRINTER_STATUS_USER_INTERVENTION > lcPrinterStatus = 'User Intervention Required' > > CASE lnPrinterStatus = cnPRINTER_STATUS_OUT_OF_MEMORY > lcPrinterStatus = 'Out of Memory' > > CASE lnPrinterStatus = cnPRINTER_STATUS_DOOR_OPEN > lcPrinterStatus = 'Door Open' > > CASE lnPrinterStatus = cnPRINTER_STATUS_SERVER_UNKNOWN > lcPrinterStatus = 'Unable to connect' > > CASE lnPrinterStatus = cnPRINTER_STATUS_POWER_SAVE > lcPrinterStatus = 'Power Save Mode' > > OTHERWISE > lcPrinterStatus = ALLTRIM(STR(lnPrinterStatus)) > ENDCASE > > ENDIF > > lnResult = ClosePrinterA(lnHandle) > > ENDIF > > >ENDWITH > >RETURN lcPrinterStatus > > > >*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* >*-- Buf2DWord >*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* >LPARAMETER tcBuffer > >LOCAL lnReturn > >lnReturn = ASC(SUBSTR(tcBuffer, 1,1)) + ASC(SUBSTR(tcBuffer, 2,1)) * 256 + ASC(SUBSTR(tcBuffer, 3,1)) * 65536 + ASC(SUBSTR(tcBuffer, 4,1)) * 16777216 > >RETURN lnReturn > > > > >