LOCAL laPrinters[1], lnI =APRINTERS(laPrinters) FOR lnI = 1 TO ALEN(laPrinters,1) =MESSAGEBOX(laPrinters[m.lnI] + " Status: " + GetPrinterStatus(laPrinters[m.lnI])) NEXT * FUNCTION GetPrinterStatus(tcPrinterName) * Date : 05/24/2006 * Author : Murad Tchary * Description: Returns printer status ****** PARAMETERS ************** * Parameters : 1 * Parameter 1: Name of the printer * ******************************************* FUNCTION GetPrinterStatus LPARAMETERS tcPrinterName *-- Printer status flags used with PRINTER_INFORMATION_2 #DEFINE cnPRINTER_STATUS_OFFSET 73 #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 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 RETURN lcPrinterStatus FUNCTION 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 lnReturnThis returned Ready for one printer and no status for others... You may try it and see, if it's more reliable.