Can you use createprocess instead? If so, you can wait for it to finish.
lcApp="NotePad.exe"
lcCmdLine="myfile.txt"
lcdir="c:\windows\"
llokay = ExeWait(lcApp,lcCmdLine,lcdir)
IF !llokay
=MESSAGEBOX('An error ocurred.')
ELSE
=MESSAGEBOX('Program is closed, returned to vfp')
ENDIF
RETURN
PROCEDURE ExeWait (lcApp, lcCmdLine, lcdir)
DO DECLexewait
PRIVATE lntimes
lntimes = 0
IF _VFP.AUTOYIELD = .F.
llsetback = .T.
ELSE
llsetback = .F.
ENDIF
_VFP.AUTOYIELD = .T.
PRIVATE lnclosepass
lnclosepass = 0
#DEFINE INFINITE 0xFFFFFFFF
LOCAL lcStartupInfo, lcProcInfo, hProcess, ;
lnPrio, lnIBelieve1
lnIBelieve1 = 1
lnPrio = 32
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
hProcess = buf2dword(SUBSTR(lcProcInfo, 1,4))
hThread = buf2dword(SUBSTR(lcProcInfo, 5,4))
DOEVENTS
DO WHILE .T.
exitcode = 0
= GetExitCodeProcess(hProcess, @exitcode)
IF exitcode # 259
EXIT
ENDIF
= Sleep (100)
ENDDO
= CloseHandle(hThread)
= CloseHandle(hProcess)
ELSE
IF llsetback
_VFP.AUTOYIELD = .F.
ENDIF
RETURN .F.
ENDIF
IF llsetback
_VFP.AUTOYIELD = .F.
ENDIF
DO RELexewait
RETURN
PROCEDURE DECLexewait
=ADLLS(dllarray)
IF TYPE('ALEN(dllarray,1') <> "N" .or. ASCAN(dllarray,'CREATEPROCESS') = 0
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
ENDIF
IF TYPE('ALEN(dllarray,1') <> "N" .or. ASCAN(dllarray,'GETLASTERROR') = 0
DECLARE INTEGER GetLastError IN kernel32
ENDIF
IF TYPE('ALEN(dllarray,1') <> "N" .or. ASCAN(dllarray,"CLOSEHANDLE") = 0
DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject
ENDIF
IF TYPE('ALEN(dllarray,1') <> "N" .or. ASCAN(dllarray,"GETEXITCODEPROCESS") = 0
DECLARE INTEGER GetExitCodeProcess IN WIN32API INTEGER hProcess, INTEGER @lpExitCode
ENDIF
IF TYPE('ALEN(dllarray,1') <> "N" .or. ASCAN(dllarray,"SLEEP") = 0
DECLARE Sleep IN kernel32 INTEGER dwMilliseconds
ENDIF
RETURN
PROCEDURE RELexewait
CLEAR DLLS CreateProcess
CLEAR DLLS GetLastError
CLEAR DLLS CloseHandle
CLEAR DLLS GetExitCodeProcess
CLEAR DLLS Sleep
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
>Hi all
>
>I am running a RUN command to Export a File from a PDA for stocktaking. After i issue
>the RUN command, I then import the delimited into a table. However, I would like the import
>command to wait until the system has finish downloading the file from the handheld, otherwise the downloading is not complete when I am importing . Any ideas ?
>
>Brian O Donovan
.·*´¨)
.·`TCH
(..·*
010000110101001101101000011000010111001001110000010011110111001001000010011101010111001101110100
"When the debate is lost, slander becomes the tool of the loser." - Socrates
Vita contingit, Vive cum eo. (Life Happens, Live With it.)
"Life is not measured by the number of breaths we take, but by the moments that take our breath away." -- author unknown
"De omnibus dubitandum"