Private pl_Completed Local lc_DocFile, lo_AcroReader, lc_Title Declare Long SetWindowPos in User32 ; Long hWnd, Long hWndInsertAfter, ; Integer X, Integer Y, Integer cX, Integer cY, Long wFlags Declare Long WaitForInputIdle in User32 ; Long hProcess, Long dwMilliseconds Set procedure to sys(16) additive If (CreateProcess(...) > 0) WaitForInputIdle( hProcess, 5000 ) && Wait for 5 seconds or idle time lo_AcroReader = CreateObject( 'clsAcroReader', 'AcroView', 'Control' ) If (type('lo_AcroReader') == 'O') With lo_AcroReader .cPdfFile = lc_DocFile If .OpenDoc() Sleep( 1000 ) && Pause a second to watch the page changing .GoToPage( 4 ) lc_Title = JustFName( lc_DocFile ) lc_Title = lc_Title + replicate(chr(0), 128-len(lc_Title)) .hWndAdobe = FindWTitle( @lc_Title, 0, 0 ) pl_Completed = .F. If .PrintDoc() Wait 'Printing dialog...' window nowait noclear Do while !pl_Completed Sleep( 3 ) enddo endif Wait 'Printing in progress...' window nowait .CloseDoc() else MessageBox( 'Open document failed', 16, 'PDF Open' ) endif .ExitAcrobat() EndWith lo_AcroReader = Null Release lo_AcroReader else MessageBox( 'Error DDE initiating', 16, 'DDE Error' ) endif Clear class clsAcroReader endif Set procedure to Clear Dlls Close all Clear all Procedure OnPrintDialog LParameters tn_Channel, tc_Action, tc_Item, tc_Data, tn_Format, tn_TransactionNo If (tc_Action == 'XACTCOMPLETE') pl_Completed = .T. endif EndProc *** Acrobat Reader Class Wrapper *** ---------------------------- Define class clsAcroReader as Custom cPdfFile = '' nChannel = -1 cService = '' cTopic = '' .hWndAdobe = 0 Procedure Init( tc_Service, tc_Topic ) Local ll_Safety With This ll_Safety = DDESetOption( 'Safety' ) DDESetOption( 'Safety', .F. ) .cService = tc_Service .cTopic = tc_Topic .nChannel = DDEInitiate( .cService, .cTopic ) DDESetOption( 'Safety', ll_Safety ) Return (.nChannel != -1) EndWith EndProc Procedure OpenDoc Local ll_Success With This If !empty( .cPdfFile ) ll_Success = DDEExecute( .nChannel, '[DocOpen("' + .cPdfFile + '")]' ) endif EndWith Return ll_Success EndProc Procedure GoToPage( tn_PageNo ) Local ll_Success, lc_Command With This If !empty( .cPdfFile ) lc_Command = '[DocGoTo("' + alltrim( .cPdfFile ) + '",' + ; transform( tn_PageNo-1 ) + ')]' ll_Success = DDEExecute( .nChannel, lc_Command ) endif EndWith Return ll_Success EndProc Procedure PrintDoc( tl_Silent ) Local ll_Success, lc_Command With This If !empty( .cPdfFile ) If tl_Silent lc_Command = '[FilePrintSilent("' + .cPdfFile + '")]' else lc_Command = '[FilePrint("' + .cPdfFile + '")]' endif ll_Success = (DDEExecute( .nChannel, lc_Command, 'OnPrintDialog' ) != -1) SetWindowPos( .hWndAdobe, -2, -500,-500,0,0, 0x10 ) endif EndWith Return ll_Success EndProc Procedure CloseDoc Local ll_Success With This If !empty( .cPdfFile ) If DDEExecute( .nChannel, '[DocClose("' + .cPdfFile + '")]' ) Sleep( 10 ) ll_Success = .T. endif endif EndWith Return ll_Success EndProc Procedure ExitAcrobat Local ll_Success With This If DDEExecute( .nChannel, '[AppExit()]' ) Sleep( 10 ) ll_Success = DDETerminate( .cTopic ) If ll_Success ll_Success = DDETerminate( .cService ) endif If ll_Success ll_Success = DDETerminate( .nChannel ) endif endif EndWith Return ll_Success EndProc EndDefineHope you can find the workaround for ver 6.xx