Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Vfp8 vs vfp9
Message
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Title:
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP SP2
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01130175
Message ID:
01130205
Views:
12
>Tamás,
>
>Without seeing a code where you declare and then call CreateProcess() it's hardly possible to judge.
Hi Anatoliy,
Heres the code. I pinched it from one of the Tracy Holtzer's threads.
lcApp="C:\Progra~1\Utvonal\UtvHatar.exe"      && app to run
lcCmdLine="C:\Progra~1\Utvonal\teszt.scr"   && file to open in notepad
lcdir="C:\Progra~1\Utvonal"	    && not required for notepad

llokay = ExeWait(lcApp,lcCmdLine,lcdir)

IF !llokay
	=MESSAGEBOX('An error ocurred.')
ELSE
	**=MESSAGEBOX('Program is closed, returned to vfp')
	**WAIT 'Program is closed, returned to vfp' WINDOW
ENDIF

RETURN

*----------------------------------------------------------------------
PROCEDURE  ExeWait (lcApp, lcCmdLine, lcdir)
DO DECLexewait  && load required dlls for exewait function
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   && 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 of the program
    DOEVENTS
    DO WHILE .T.
       exitcode = 0                    && initialize return value to 0
       = GetExitCodeProcess(hProcess, @exitcode)    && try to obtain process exit code
       IF exitcode # 259                && not still busy
           EXIT                            && fall out of loop
       ENDIF
       = Sleep (100)                    && wait .1 seconds
    ENDDO
    = CloseHandle(hThread)
    = CloseHandle(hProcess)
ELSE
    IF llsetback
        _VFP.AUTOYIELD = .F.
    ENDIF
    RETURN .F.
ENDIF
IF llsetback
    _VFP.AUTOYIELD = .F.
ENDIF
DO RELexewait  && release dlls for exewait function
RETURN

*----------------------------------------------------------------------
PROCEDURE DECLexewait  && load required dlls for exewait function
=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  && release dlls for exewait function

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
Thanks for help,
Tamas
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform