Coverage profiler SDK

API Funkce


SetLastError()

Nastaví poslední chybu pro volající vlákno.
NONE SetLastError(
   fdwError INTEGER && Číslo chyby
)
Parametr:
fdwError
Číslo chyby.
Příklad:
=LoadDllFunc("DECLARE INTEGER SetLastError IN KERNEL32.DLL INTEGER fdwError")
=SetLastError(0) && Nastav, že nedošlo k žádné chybě


GetLastError()

Pokusí se inicializovat API funkce v DLL knihovnách.
INTEGER GetLastError()
Vrací:
Číslo poslední chyby.
Příklad:
=LoadDllFunc("DECLARE INTEGER SetLastError IN KERNEL32.DLL INTEGER fdwError")
=LoadDllFunc("DECLARE INTEGER GetLastError IN KERNEL32.DLL")
=LoadDllFunc("DECLARE INTEGER MoveFile IN KERNEL32 STRING @, STRING @")
=SetLastError(0) && Nastav, že nedošlo k žádné chybě
* Pokus se přejmenovat soubor
IF MoveFile(("c:\temp\file1.txt"+CHR(0)),("c:\temp\file2.txt"+CHR(0)))=0
   * Nepodařilo se to
   ?GetLastError()
ENDIF


CreateProcess()

Tato funkce umožňuje spouštět EXE/COM/PIF/SCR moduly i s parametry a ovlivněním hlavního okna aplikace.
INTEGER CreateProcess(
   lpApplicationName STRING,    && Název spouštěného modulu
   lpCommandLine STRING,        && Příkazový řádek
   lpProcessAttributes INTEGER, && Bezpečnostní atributy procesu
   lpThreadAttributes INTEGER,  && Bezpečnostní atributy threadu
   bInheritHandles INTEGER,     && Handle inheritance flag
   dwCreationFlags INTEGER,     && Příznak vytvoření procesu
   lpEnvironment INTEGER,       && Ukazatel na nový blok prostředí
   @lpCurrentDirectory STRING,  && Ukazatel na název startovacího adresáře
   @lpStartupInfo STRING,       && Ukazatel na STARTUPINFO
   @lpProcessInformation STRING && Ukazatel na PROCESS_INFORMATION
)
Parametr:
lpApplicationName
Název spouštěného modulu. Může být prázdný, ale pak musí být vyplněn parametr lpCommandLine.
lpCommandLine
Příkazový řádek. Může být prázdný, ale pak musí být vyplněn parametr lpApplicationName.
lpProcessAttributes
Bezpečnostní atributy procesu. Pouze pro Windows NT a vyšší, může být .NULL. .
lpThreadAttributes
Bezpečnostní atributy threadu. Pouze pro Windows NT a vyšší, může být .NULL. .
bInheritHandles
Handle inheritance flag. Příznak,zda nový proces zdědí handly z volaného procesu. Jestliže ANO , pak každý zděděný otevřený handle ve volaném procesu je předán novému procesu. Předané handly mají stejná přístupová práva,jako původní,zděděné.
dwCreationFlags
Příznak vytvoření procesu. Kumulativní příznak pro vytvoření procesu. Je to součet některých z níže uvedených konstant:
CREATE_DEFAULT_ERROR_MODE, CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, CREATE_SEPARATE_WOW_VDM, CREATE_SHARED_WOW_VDM, CREATE_SUSPENDED, CREATE_UNICODE_ENVIRONMENT, DEBUG_PROCESS, DEBUG_ONLY_THIS_PROCESS, DETACHED_PROCESS
a NORMAL_PRIORITY_CLASS nebo IDLE_PRIORITY_CLASS nebo HIGH_PRIORITY_CLASS nebo REALTIME_PRIORITY_CLASS

Nás zajímá pouze konstanta NORMAL_PRIORITY_CLASS, která určuje prioritu nově spuštěného procesu.
lpEnvironment
Ukazatel na blok prostředí. Pokud parametr není zadán, pak nový proces použije blok prostředí volajícího procesu.
lpCurrentDirectory
Ukazatel na řetězec , který specifikuje počáteční (startovací) adresář. Tento adresář musí obsahovat disk. Pokud parametr není předán, pak nový proces použije startovací adresář volajícího procesu.
lpStartupInfo
Ukazatel na strukturu STARTUPINFO popisující jaká má být velikost, pozice atd. hlavního okna procesu.
lpProcessInformation
Ukazatel na strukturu PROCESS_INFORMATION, která po spuštění nového procesu obsahuje jeho identifikaci.
Vrací:
Pokud se funkce ukončí korektně, pak vrací číslo > 0.
Pokud se funkce neukončí korektně, pak vrací 0. Upřesňující kód chyby lze zjistit pomocí API funkce GetLastError().
Příklad:
LOCAL loSI,loPI,lcSI,lcPI,lcProgram,liExitCode
* Deklarace API funkcí
=LoadDllFunc("DECLARE INTEGER CreateProcess IN kernel32.DLL STRING, STRING, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, STRING @, STRING @, STRING @")
=LoadDllFunc("DECLARE INTEGER SetLastError IN kernel32 Integer fdwError")
=LoadDllFunc("DECLARE INTEGER CloseHandle IN kernel32.DLL INTEGER hObject")
=LoadDllFunc("DECLARE INTEGER WaitForSingleObject IN kernel32.DLL INTEGER hHandle, INTEGER dwMilliseconds")
*=LoadDllFunc("DECLARE         Sleep IN kernel32 integer")
*=LoadDllFunc("DECLARE INTEGER GetExitCodeProcess   IN kernel32 INTEGER ,INTEGER @")


* Vytvoř objekt pro ovlivnění hlavního okna aplikace
loSI=CREATEOBJECT("_struc_STARTUPINFO")
* Vytvoř objekt pro navrácení informací o spuštěném procesu
loPI=CREATEOBJECT("_struc_PROCESS_INFORMATION")

* Při spuštění procesu skryj hlavní okno aplikace
loSI.dwFlags=STARTF_USESHOWWINDOW
loSI.wShowWindow=SW_HIDE

* Vytvoř C++ strukturu z VFP objektu
lcSI=loSI.CreateString()
lcPI=loPI.CreateString()

lcProgram = "Muj.exe param1 param2" + CHR(0)
=SetLastError(0)
IF CreateProcess(.NULL., lcProgram, 0, 0, 1,  NORMAL_PRIORITY_CLASS, 0, (GetTempPathEx()+CHR(0)), @lcSI, @lcPI)<>0
   * Výborně neselhalo to
   * Načti zpět informace o spuštěném procesu z řetězce do vlastností tříd.
   loPI.ReadString(@lcPI)
   * Čekej, dokud proces běží
   DO WHILE WaitForSingleObject(loPI.hProcess, 250 ) = WAIT_TIMEOUT

   ENDDO

   * Čekej, dokud proces běží (použití funkce GetExitCodeProcess())
   liExitCode=STILL_ACTIVE
   DO WHILE liExitCode=STILL_ACTIVE
      =Sleep(500)
      =GetExitCodeProcess(loPI.hProcess,@liExitCode )
   ENDDO

   =CloseHandle(loPI.hProcess) && Uzavři handle
ENDIF


WaitForSingleObject()

Tato funkce vrací jestli objekt signalizuje stav nebo zda vypršel časový interval.
INTEGER WaitForSingleObject(
   hHandle INTEGER,        && Handle objektu
   dwMilliseconds INTEGER  && Čas v milisekundách
)
Parametr:
hHandle
Handle objektu
dwMilliseconds
Čas v milisekundách
Vrací:
WAIT_ABANDONEDObjekt byl přerušen
WAIT_OBJECT_0Objekt signalizuje
WAIT_TIMEOUTPokud dojde k uplynutí intervalu a objekt nesignalizuje
Příklad:


CloseHandle()

Uzavře handle otevřeného objektu.
BOOLEAN CloseHandle(
   liHandle INTEGER && Handle objektu
)
Parametr:
liHandle
Handle objektu
Vrací:
.T. pokud se podaří handle uzavřít
.F. pokud se to nepodaří.
Příklad:


MoveFile()

Přejmenuje/přesune soubor.
INTEGER MoveFile(
   @lcFileOld STRING, && Umístění a název souboru
   @lcFileNew STRING  && Nové umístění a název souboru
)
Parametry:
lcFileOld
Umístění a název souboru
lcFileNew
Nové umístění a název souboru
Vrací:
0 - Při přesunu došlo k chybě
>=1 - Přesun proběhl bez chyb
Poznámka:
Oba parametry musí být ukončeny znakem /0.
Příklad:
=LoadDllFunc("DECLARE INTEGER MoveFile IN KERNEL32 STRING @, STRING @")
IF MoveFile(("C:\temp\file.txt"+CHR(0)),("C:\temp\file2.txt"+CHR(0)))=0
   WAIT WIND "Chyba"
ENDIF


Sleep()

Pozastaví akutální vlákno na určitou dobu.
NONE Sleep(
   liInterval INTEGER && Interval
)
Parametr:
liInterval
Interval v milisekundách po který má vlákno stát.
Příklad:


GetExitCodeProcess()

Vrátí návratový kód ukončeného procesu.
INTEGER GetExitCodeProcess(
   liProcess INTEGER, && Handle procesu
   @liStatus INTEGER  && Status procesu
)
Parametry:
liProcess
Handle procesu
liStatus
Status procesu
Vrací:
0 - Při volání funkce došlo k chybě
>=1 - Volání funkce proběhle bez chyb
Parametr liStatus je naplněn aktuálním statusem procesu.
Příklad: