Import initial din SVN ROAAUTO/Trunk @HEAD
This commit is contained in:
137
COMUN/programe/Procese.prg
Normal file
137
COMUN/programe/Procese.prg
Normal file
@@ -0,0 +1,137 @@
|
||||
FUNCTION Createprocess(lcExe,lcCommandLine,lnShowWindow,llWaitForCompletion)
|
||||
LOCAL hProcess, cProcessInfo, cStartupInfo
|
||||
|
||||
DECLARE INTEGER CreateProcess IN kernel32 as _CreateProcess;
|
||||
STRING lpApplicationName,;
|
||||
STRING lpCommandLine,;
|
||||
INTEGER lpProcessAttributes,;
|
||||
INTEGER lpThreadAttributes,;
|
||||
INTEGER bInheritHandles,;
|
||||
INTEGER dwCreationFlags,;
|
||||
INTEGER lpEnvironment,;
|
||||
STRING lpCurrentDirectory,;
|
||||
STRING lpStartupInfo,;
|
||||
STRING @ lpProcessInformation
|
||||
|
||||
cProcessinfo = REPLICATE(CHR(0),128)
|
||||
cStartupInfo = GetStartupInfo(lnShowWindow)
|
||||
|
||||
|
||||
|
||||
IF !EMPTY(lcCommandLine)
|
||||
lcCommandLine = ["] + lcExe + [" ]+ lcCommandLine
|
||||
ELSE
|
||||
lcCommandLine = ""
|
||||
ENDIF
|
||||
lnResult = _CreateProcess(lcExe,lcCommandLine,0,0,1,0,0,;
|
||||
SYS(5)+CURDIR(),cStartupInfo,@cProcessInfo)
|
||||
lhProcess = CHARTOBIN( SUBSTR(cProcessInfo,1,4) )
|
||||
IF llWaitForCompletion
|
||||
#DEFINE WAIT_TIMEOUT 0x00000102
|
||||
DECLARE INTEGER WaitForSingleObject IN kernel32.DLL ;
|
||||
INTEGER hHandle, INTEGER dwMilliseconds
|
||||
DO WHILE .T.
|
||||
*** Update every 100 milliseconds
|
||||
IF WaitForSingleObject(lhProcess, 100) != WAIT_TIMEOUT
|
||||
EXIT
|
||||
ELSE
|
||||
DOEVENTS
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDIF
|
||||
|
||||
DECLARE INTEGER CloseHandle IN kernel32.DLL ;
|
||||
INTEGER hObject
|
||||
CloseHandle(lhProcess)
|
||||
RETURN IIF(lnResult=1,.t.,.f.)
|
||||
ENDFUNC
|
||||
|
||||
|
||||
|
||||
|
||||
FUNCTION getStartupInfo(lnShowWindow)
|
||||
LOCAL lnFlags
|
||||
* creates the STARTUP structure to specify main window
|
||||
* properties if a new window is created for a new process
|
||||
IF EMPTY(lnShowWindow)
|
||||
lnShowWindow = 1
|
||||
ENDIF
|
||||
*| typedef struct _STARTUPINFO {
|
||||
*| DWORD cb; 4
|
||||
*| LPTSTR lpReserved; 4
|
||||
*| LPTSTR lpDesktop; 4
|
||||
*| LPTSTR lpTitle; 4
|
||||
*| DWORD dwX; 4
|
||||
*| DWORD dwY; 4
|
||||
*| DWORD dwXSize; 4
|
||||
*| DWORD dwYSize; 4
|
||||
*| DWORD dwXCountChars; 4
|
||||
*| DWORD dwYCountChars; 4
|
||||
*| DWORD dwFillAttribute; 4
|
||||
*| DWORD dwFlags; 4
|
||||
*| WORD wShowWindow; 2
|
||||
*| WORD cbReserved2; 2
|
||||
*| LPBYTE lpReserved2; 4
|
||||
*| HANDLE hStdInput; 4
|
||||
*| HANDLE hStdOutput; 4
|
||||
*| HANDLE hStdError; 4
|
||||
*| } STARTUPINFO, *LPSTARTUPINFO; total: 68 bytes
|
||||
|
||||
|
||||
#DEFINE STARTF_USESTDHANDLES 0x0100
|
||||
#DEFINE STARTF_USESHOWWINDOW 1
|
||||
#DEFINE SW_HIDE 0
|
||||
#DEFINE SW_SHOWMAXIMIZED 3
|
||||
#DEFINE SW_SHOWNORMAL 1
|
||||
lnFlags = STARTF_USESHOWWINDOW
|
||||
RETURN binToChar(80) +;
|
||||
binToChar(0) + binToChar(0) + binToChar(0) +;
|
||||
binToChar(0) + binToChar(0) + binToChar(0) + binToChar(0) +;
|
||||
binToChar(0) + binToChar(0) + binToChar(0) +;
|
||||
binToChar(lnFlags) +;
|
||||
binToWordChar(lnShowWindow) +;
|
||||
binToWordChar(0) + binToChar(0) +;
|
||||
binToChar(0) + binToChar(0) + binToChar(0) + REPLICATE(CHR(0),30)
|
||||
ENDFUNC
|
||||
|
||||
|
||||
|
||||
FUNCTION CharToBin(lcBinString,llSigned)
|
||||
LOCAL m.i, lnWord
|
||||
lnWord = 0
|
||||
FOR m.i = 1 TO LEN(lcBinString)
|
||||
lnWord = lnWord + (ASC(SUBSTR(lcBinString, m.i, 1)) * (2 ^ (8 * (m.i - 1))))
|
||||
ENDFOR
|
||||
|
||||
IF llSigned AND lnWord > 0x80000000
|
||||
lnWord = lnWord - 1 - 0xFFFFFFFF
|
||||
ENDIF
|
||||
RETURN lnWord
|
||||
* wwAPI :: CharToBin
|
||||
ENDFUNC
|
||||
|
||||
************************************************************************
|
||||
FUNCTION BinToChar(lnValue)
|
||||
****************************************
|
||||
Local byte(4)
|
||||
If lnValue < 0
|
||||
lnValue = lnValue + 4294967296
|
||||
EndIf
|
||||
byte(1) = lnValue % 256
|
||||
byte(2) = BitRShift(lnValue, 8) % 256
|
||||
byte(3) = BitRShift(lnValue, 16) % 256
|
||||
byte(4) = BitRShift(lnValue, 24) % 256
|
||||
RETURN Chr(byte(1))+Chr(byte(2))+Chr(byte(3))+Chr(byte(4))
|
||||
* wwAPI :: BinToChar
|
||||
ENDFUNC
|
||||
|
||||
************************************************************************
|
||||
FUNCTION BinToWordChar(lnValue)
|
||||
****************************************
|
||||
*** Function: Creates a DWORD value from a number
|
||||
*** Pass: lnValue - VFP numeric integer (unsigned)
|
||||
*** Return: binary string
|
||||
************************************************************************
|
||||
RETURN Chr(MOD(m.lnValue,256)) + CHR(INT(m.lnValue/256))
|
||||
ENDFUNC
|
||||
|
||||
Reference in New Issue
Block a user