LPARAMETERS c_sendthis #DEFINE HANDLE INTEGER #DEFINE BOOLEAN LONG DECLARE LONG EndPagePrinter IN winspool.drv LONG hPrinter DECLARE LONG StartPagePrinter IN winspool.drv LONG hPrinter DECLARE LONG GetLastError IN WIN32API AS GetLastError DECLARE BOOLEAN OpenPrinterA IN WINSPOOL.DRV AS OpenPrinter ; STRING pPrinterName, ; HANDLE @phPrinter, ; LONG pDefault DECLARE LONG StartDocPrinterA IN WINSPOOL.DRV AS StartDocPrinter ; LONG hPrinter, ; LONG LEVEL, ; STRING pDocInfo DECLARE BOOLEAN EndDocPrinter IN WINSPOOL.DRV AS EndDocPrinter ; HANDLE hPrinter DECLARE BOOLEAN WritePrinter IN WINSPOOL.DRV AS WritePrinter ; HANDLE hPrinter, ; STRING pBuf, ; LONG cbBuf, ; LONG @pcWritten DECLARE BOOLEAN ClosePrinter IN WINSPOOL.DRV AS ClosePrinter ; HANDLE hPrinter LOCAL cPtrName, lhPrinter, lReturn, lpcWritten, lDoc, sWrittenData, ; lDocInfo, dwBytesWritten, libload, lcStruct, cProcFileName STORE 0 TO lhPrinter, lReturn, lpcWritten, lDoc, dwBytesWritten sWrittenData = "" *lpData = "Hello World." dwCount=LEN(c_sendthis) m.cPtrName=GETPRINTER() IF ISBLANK(m.cPtrName) RETURN .F. ENDIF *typedef struct _DOC_INFO_1 { * LPTSTR pDocName; * LPTSTR pOutputFile; * LPTSTR pDatatype; *} DOC_INFO_1 IF OpenPrinter(cPtrName, @lhPrinter, 0) = 0 MESSAGEBOX("The Printer Name you typed wasn't recognized.") RETURN ENDIF *!* Create a DOCINFO structure to pass to StartDoc *!* Requires API structure class definition in foxstruct.prg IF ATC("foxstruct.",SET("PROCEDURE"))=0 cProcFileName = JUSTPATH(SYS(16)) + "\foxstruct" SET PROC TO (cProcFileName + ".prg") ADDITIVE libload = .T. ENDIF REPLICATE(CHR(0), 16) lDocInfo = CREATEOBJECT('struct') lDocInfo.AddField( 'pDocName', '@STRING', "Document" ) lDocInfo.AddField( 'pOutputFile', '@STRING', "" ) lDocInfo.AddField( 'pDatatype', '@STRING', 0 ) lcStruct = lDocInfo.STRUCTURE IF StartDocPrinter( lhPrinter, 1, @lcStruct ) = 0 && Inform the spooler the document is beginning. MESSAGEBOX("Error calling StartDoc" + CHR(13) + ; " Error code : " + ALLTRIM(STR(GetLastError())),48) ClosePrinter(lhPrinter) RETURN FALSE ENDIF IF StartPagePrinter(lhPrinter) =0 && Start a page. EndDocPrinter(lhPrinter) ClosePrinter(lhPrinter) RETURN FALSE ENDIF IF WritePrinter(lhPrinter, c_sendthis, dwCount, @dwBytesWritten ) = 0 && Send the data to the printer. EndPagePrinter(lhPrinter) EndDocPrinter(lhPrinter) ClosePrinter(lhPrinter) RETURN FALSE ENDIF IF EndPagePrinter(lhPrinter) = 0 && End the page. EndDocPrinter(lhPrinter) ClosePrinter(lhPrinter) RETURN FALSE ENDIF IF EndDocPrinter(lhPrinter) = 0 && Inform the spooler that the document is ending. ClosePrinter(lhPrinter) RETURN FALSE ENDIF ClosePrinter(lhPrinter) && Tidy up the printer handle. IF libload RELE PROC (cProcFileName + ".fxp") ENDIF