*--Requires Acrobat Reader 4 or 5 *--Requires registry.vcx and path stored to xregclass *--Requires a .pdf form with the path included and stored in xacordform xregclass = "c:\programnotes\registry.vcx" && modify for your system xacordform = "C:\foxpro\vfp8\61nc.pdf" && modify for your system DO decl #Define ERROR_SUCCESS 0 && OK oReg = NEWOBJECT("FileReg",xregclass) cAppKey = "" cAppName = "" m.cExtn = "PDF" nErrNum = oReg.GetAppPath(m.cExtn,@cAppKey,@cAppName) IF m.nErrNum # ERROR_SUCCESS MESSAGEBOX(C_EXTNOFOUND_LOC) RETURN ENDIF IF ATC(".EXE",m.cAppName) #0 m.cAppName= ALLTRIM(SUBSTR(m.cAppName,1,ATC(".EXE",m.cAppName)+3)) IF ASC(LEFT(cAppName,1))=34 &&check for long file name in quotes m.cAppName = SUBSTR(m.cAppName,2) ENDIF ENDIF lcACORDdef = SYS(5)+SYS(2003) lnpos=(RAT("\",m.cAppName)+1) && one position to the right of lcshort='' lcpath='' IF lnpos > 0 lcshort = UPPER(SUBSTR(m.cAppName,lnpos)) && grab from lnpos to end lcpath = UPPER(LEFT(m.cAppname,RAT("\",m.cAppname)-1)) ENDIF llacordok = .F. IF !EMPTY(lcshort) .and. !EMPTY(lcpath) lcpath = "'"+lcpath+"'" SET DEFAULT TO &lcpath llacordok = RunAndWait(lcshort,xacordform,lcpath) ENDIF IF !llacordok =MESSAGEBOX("Unable Start Adobe.",0+16+4096,"ERROR") ELSE WAIT WINDOW "Finished Displaying PDF Form" NOWAIT ENDIF SET DEFAULT TO &lcACORDdef RETURN PROCEDURE RunAndWait (lcApp, lcCmdLine, lcdir) #DEFINE INFINITE 0xFFFFFFFF LOCAL lcStartupInfo, lcProcInfo, hProcess, ; lnPrio, lnIBelieve1 lnIBelieve1 = 1 && Don't remember what that was lnPrio = 32 && Priority of Process=Normal lcStartupInfo = CHR(68) + REPLI(CHR(0), 67) lcProcInfo = REPLI(CHR(0), 16) IF CreateProcess(0, m.lcApp+" "+m.lcCmdLine+CHR(0), 0,0,; m.lnIBelieve1, m.lnPrio,; 0, 0, @lcStartupInfo, @lcProcInfo) <> 0 * process and thread handles returned in ProcInfo structure hProcess = buf2dword(SUBSTR(lcProcInfo, 1,4)) hThread = buf2dword(SUBSTR(lcProcInfo, 5,4)) * waiting until the termination = WaitForSingleObject(hProcess, INFINITE) = CloseHandle(hThread) = CloseHandle(hProcess) ELSE RETURN .F. ENDIF RETURN PROCEDURE DECL DECLARE INTEGER CreateProcess IN kernel32; INTEGER lpAppName, STRING lpCmdLine, INTEGER lpProcAttr,; INTEGER lpThrAttr, INTEGER bInhHandles, INTEGER dwCrFlags,; INTEGER lpEnvir, INTEGER lpCurDir, ; STRING @lpStInfo, STRING @lpProcInfo DECLARE INTEGER GetLastError IN kernel32 DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject DECLARE INTEGER WaitForSingleObject IN kernel32; INTEGER hHandle, INTEGER dwMilliseconds RETURN FUNCTION buf2dword(lcBuffer) RETURN ASC(SUBSTR(lcBuffer, 1,1)) + ; ASC(SUBSTR(lcBuffer, 2,1)) * 256 +; ASC(SUBSTR(lcBuffer, 3,1)) * 65536 +; ASC(SUBSTR(lcBuffer, 4,1)) * 16777216 RETURN