* Sometime before you need to check SET PROCEDURE TO DIRPRTCLASS ADDITIVE oDirPrt = CREATEOBJECT('DirectPrintOutput') * Whenever you need to check printer availability to accept spooled output lPrinterCanBeAccessed = .F. IF oDirPrt.PrinterOpen(cWindowsPrinterName_or_PrintPort_or_PrinterUNC) lPrinterCanBeAccessed = oDirPrt.DocOpen() oDirPrt.PrinterClose() ENDIF * lPrinterCanBeAccessed indicates whether you can successfully create * spool jobs for the selected printer. It does not indicate that the * printer is currently working (it might have a printer jam or be in use * by another user's print job) but does report if you can spool output to * it - if it's busy or out of paper or whatever, Windows will accept any * work sent to it and hold it (spool the output) until it becomes available * without giving an error. It will not force a page feed or reset the printer * state or do any of the other things that writing to the GDI might do. It * also will not affect any VFP printer job currently in progress, even if * you're in the middle of writing to that exact printer with VFPYou can download this from the Files section - you'll also need ClsHeap, so download files #986 and #1498