Külső programok végrehajtása

Csak megnyitja a dokumentumot. A dokumentumot a standard program nyitja meg

Ha már használt ShellExecute és / vagy WinExec a Delphi, akkor kezdi el használni TProcess alternatívájaként az FPC / Lazarus (ez is igaz, abban az esetben a Lazarus Linux alatt, mivel TProcess egy cross-platform komponens).

Megjegyzés: Az FPC / Lazarus támogatja a ShellExecute és a WinExec programokat. de csak a Win32 környezetben. Ha többplatformos programot írt, akkor a legjobb módszer a TPprocess használata.

(Folyamat) RunCommand

Az FPC 2.6.2-ben a TProcess néhány segítőfunkcióját hozzáadtuk a folyamatmodulhoz az fpcup csomagolásán alapulva. Ezek a funkciók alap- és közbenső szintű használatra is képesek, és képesek egy sorból és hatalmas kimeneti adatok kimenetéről is.

A funkció túlterhelt változata visszaállíthatja a program kilépési kódját. A RunCommandInDir a programot a megadott mappában futtatja.

SysUtils.ExecuteProcess

A legegyszerűbb módja, ha nem kell kommunikálni a folyamattal - egyszerűen csak a hívást használja

Ha ezt a módszert használja, az alkalmazás "lefagy", amíg a hívott program befejeződik. Ez hasznos lehet, ha a felhasználónak meg kell tennie valamit az alkalmazás használata előtt. Ha ezt a korlátozást meg kívánja szüntetni, akkor a hasznosabb cross-platform módszer a TPprocess. vagy ha a célplatform csak Windows, akkor használja a ShellExecute parancsot.

MS Windows: CreateProcess, ShellExecute és WinExec

Megjegyzés: Az FPC / Lazarus a CreateProcess támogatást nyújt. ShellExecute és / vagy WinExec. csak a Win32 / 64-en. Ha a programja platformon keresztüli, használja a RunCommand vagy a TProcess.

Megjegyzés: A WinExec 16 bites hívásokat használ, és elavult. Az FPC új verziói használatakor figyelmeztetést generál.

ShellExecute - alapfunkció a MS Windows (ShellApi.h) a jó dokumentáció az MSDN (olvasd el a dokumentációt, ha úgy gondolja, hogy a funkció nem megbízható).

Van egy WideChar függvény is - ShellExecuteExW. ShellExecuteExA AnsiChar módban.

Ahogy fMask lehet ipolzovat SEE_MASK_DOENVSUBST, SEE_MASK_FLAG_NO_UI vagy SEE_MASK_NOCLOSEPROCESS stb Ha Delphi ShellExecute megnyitni egy dokumentumot, például egy Word dokumentumot, vagy egy linket, akkor nézd meg a nyitott * (OpenURL stb) lclintf modult.

A ShellExecuteEx használata emelt (rendszergazdai jogok) jogokkal

Ha magasabb rendű (rendszergazdai) jogosultságokkal rendelkező programot szeretne használni, használjon runákat a ShellExecuteEx alternatívájaként:

A TPprocess segítségével külső programokat futtathat. Ebben az esetben a leghasznosabbak a következők:

Megjegyzés: A TPprocess nem egy shell! És nem terminál! Nem tud közvetlenül végrehajtani parancsfájlokat vagy átirányítani a kimenetet olyan operátorokkal, mint a "|", ">", "<", "&" и т.д. Но возможно получить те же самые результаты используя TProcess, далее будут приведены некоторые примеры.

Fontos: Meg kell adnia a teljes fájl elérési útját. Például: "/ bin / cp" a "cp" helyett. Ha a program valahol a PATH változóban van, használhatja a FindDefaultExecutablePath függvényt az LCL FileUtil modulból.

Egyszerű példa

Itt van! Most megtanultad, hogyan kell külső programot futtatnia a sajátjától.

Jobb példa

Nagyon jó, de hogyan kapom meg a program kimenetét?

Nos, hagyja, hogy a példánk kissé növekedjen, és most így fog kinézni:

Nagy mennyiségű kimenet olvasása

Az előző példában vártam a program befejezését. Ezután olvassuk el mindazt, amit a program írt a kimeneti folyamba. De ez is kiderülhet, hogy így legyen, hogy a program megjeleníti a sok adat, a csatorna tele van, és az is, leáll egyidejűleg fut a program megvárja a futó program, ami viszont nem lehet leállítani amíg meg nem jelenik az összes adatot. Van ütközés, holtpont.

A bemeneti és kimeneti folyamatfolyamatok használata

Néhány tipp a TPprocess használatakor

Ha többplatformos programot hoz létre, az egyes operációs rendszerek parancssorait a "" és az "" irányelvek segítségével módosíthatja.

Példa a "kommunikációra" az eljárással

A pasdoc forráskódon belül két modul hajtja végre a helyesírás-ellenőrzést, kommunikál egymással azáltal, hogy átvezeti az irányítást a végrehajtás folyamatába:

  • PasDoc_ProcessLineTalk.pas - Ez a modul végrehajtja a TProcessLineTalk osztályt, amely a TProcess gyermeke. Felhasználható adatcserére bármely, az alapuló folyamaton keresztül.
  • PasDoc_Aspell.pas - Munkagépek osztály TAspellProcess, amely ellenőrzi a helyesírást és örökölt TProcessLineTalk, hogy végre aspellt és kezelésére a folyamat a futtatáshoz.

Mindkét modul független a többi pasdoc forrásmodultól (moduloktól), így valós példaként szolgálhatnak a TPprocess használatára, a munka és a kommunikáció érdekében, ha adatokat cserélnek egy másik programmal.