>function do_it() > > declare integer OpenPrinter in Winspool.drv ; > string @ pPrinterName, ; > long @ phPrinter, ; > Integer > > declare integer ClosePrinter in Winspool.drv long hPrinter > > declare integer GetPrinterDriver in Winspool.drv ; > long PrinterHandle, ; > Integer pEnvironment, ; && null for current > long nLevel, ; > String @ pDriverInfo, ; && driver data buffer > long cbBuflen, ; > long @pcbNeeded > > local i, aa[1], PrinterName, PrinterPort, PrinterDriver > > for i = 1 to aprinters(aa) > PrinterName = aa[m.i, 1] > PrinterPort = aa[m.i, 2] > > if( !PrinterDriver_Get(m.PrinterName, @m.PrinterDriver) ) > PrinterDriver = '???' > endif > > ?PrinterName, PrinterPort, PrinterDriver > endfor >endfunc > >function PrinterDriver_Get(PrinterName, PrinterDriver) > > > local Success > Success = TRUE > > local Handle, DriverInfo, pcbNeeded > DriverInfo = space(1024) > > > Handle = 0 > pcbNeeded = 0 > > do case > case empty(OpenPrinter(@m.PrinterName, @m.Handle, 0)) > assert FALSE > Success = FALSE > > case empty(GetPrinterDriver(m.Handle, 0, 1, @m.DriverInfo, len(m.DriverInfo), @m.pcbNeeded)) > assert FALSE > Success = FALSE > > otherwise > > PrinterDriver = right(m.DriverInfo, m.pcbNeeded-4) > PrinterDriver = left(m.PrinterDriver, at(chr(0), m.PrinterDriver)-1) > endcase > > > do case > case empty(m.Handle) > > case empty(ClosePrinter(m.Handle)) > assert FALSE > > endcase > > return m.Success > >endfunc >*-------------------------------------------------------------------------- >