DESCARGAR MECANET...
Curso MecaNet - Descargar
Sitio Oficial del Curso de mecanografía MecaNet
MecaNet Descargar gratis el curso MecaNet
MecaNet Build date: 20.04.24


Icono
"Ejecutar una app externa y esperar que termine"

 



En esta sección de Código fuente en Delphi vamos a mostrar cómo podemos ejecutar una app externa y esperar a que esta termine su ejecución.

Para ello, he escrito esta pequeña app de ejemplo

Para ejecutar aplicaciones externas disponemos de dos funciones de la Api: CreateProcess y ShellExecuteEx (esta última de la ShellApi)

Para utilizar la función CreateProcess he escrito la "function Ejecutar(const Archivo, Params: string; Mostrar: Word; esperar: boolean): Boolean;"

Los parámetros que recibe esta función son:

  • Una cadena con la ruta del archivo que queremos ejecutar
  • Una cadena con los posibles parámetros que queramos pasar al archivo que vamos a ejecutar
  • La forma en que se mostrará la ventana del programa, son los mismos valores que le podemos pasar a la funció ShowWindow de la Api: SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED...
  • Un valor tipo Boolean (verdadero o falso) que le indica a la función si queremos esperar a que la app termine de ejecutarse para continuar con el código de nuestro programa.

La función "Ejecutar" devuelve verdadero/falso según se haya podido realizar correctamente la acción.

Como ya he comentado anteriormente, a esta función debemos pasarle en el parámeto "Archivo" la ruta completa del programa que queramos ejecutar, por ejemplo "C:\windows\system32\notepad.exe" y además debe ser la ruta de un archivo ejecutable (.exe .bat .com ...)

Para utilizar la función ShellExecuteEx he escrito la funció EjecutarShell que tiene exactamente los mismos parámetros que la función explicada anteriormente. En este caso debemos incluir en la clausula "uses" la unidad "shellapi"

La principal ventaja de la función EjecutarShell sobre la función Ejecutar, es que en esta nueva función, el parámetro "Archivo" no es necesario que contenga la ruta completa del archivo ejecutable, puesto que si no lleva ruta, el sistema se encargará de buscarlo. Por ejemplo, no es necesario escribir "C:\windows\system32\notepad.exe" bastará con escribir "notepad.exe" o incluso "notepad" para que se ejecute el block de notas. Es más, este parámetro "Archivo" no es necesario que sea un archivo ejecutable (como ocurría con la función anterior), puede ser un documento o incluso una dirección de internet, que el sistema se encargará de abrir el programa adecuado para mostrar ese documento o página web.

En la siguiente imagen puedes ver un ejemplo de uso de esta app.

A continuación, puedes ver el código completo de la app, y si lo deseas puedes descargarlo todo (código y app) en un archivo "zip".

Unit1.pas
unit Unit1;


interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses shellapi;


function Ejecutar(const Archivo, Params: string; Mostrar: Word; esperar: boolean): Boolean;
var
  StartupInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  CmdLine := '"' + Archivo + '" ' + Params;
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  with StartupInfo do
  begin
    cb := SizeOf(StartupInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := Mostrar;
  end;
  Result := CreateProcess(nil,
    PChar(CmdLine),
    nil,
    nil,
    False,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
    nil,
    PChar(ExtractFilePath(Archivo)),
    StartupInfo,
    ProcInfo);
  if not Result then exit;
  if esperar then WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
end;


procedure TForm1.Button1Click(Sender: TObject);
var OK: boolean;
begin

  Hide;
  OK := Ejecutar('c:\windows\system32\notepad.exe', '', SW_SHOWNORMAL, true);
  Show;

  if OK then
    ShowMessage('Ejecutar realizado con éxito.')
  else
    ShowMessage('Error al Ejecutar el programa.');

end;

/////////////////////////////////////////////////////////////////////////////////////////

function EjecutarShell(const Archivo, Params: string; Mostrar: Word; esperar: boolean): Boolean;
var
  Info: TShellExecuteInfo;
begin
  FillChar(Info, SizeOf(Info), 0);
  Info.cbSize := SizeOf(Info);
  Info.fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_FLAG_DDEWAIT or SEE_MASK_NOCLOSEPROCESS;
  Info.lpVerb := PChar('Open');
  Info.lpFile := PChar(Archivo);
  Info.lpParameters := PChar(Params);
  //Info.lpDirectory := PChar(ExtractFilePath(Archivo));
  Info.nShow := Mostrar;
  Result := ShellExecuteEx(@Info);
  if not Result then exit;
  if esperar then WaitForSingleObject(Info.hProcess, INFINITE);
  CloseHandle(Info.hProcess);
end;



procedure TForm1.Button2Click(Sender: TObject);
var OK: boolean;
begin

  Hide;
  OK := EjecutarShell('notepad', '', SW_SHOWNORMAL, true);
  Show;

  if OK then
    ShowMessage('EjecutarShell realizado con éxito.')
  else
    ShowMessage('Error al Ejecutar el programa.');

end;

end.
Puede descargar el código fuente anterior con este enlace:
codigo-fuente-ejecutar.zip
Puede encontrar una versión Portable de Delphi en esta dirección:
http://www.andyaska.com/?act=download&id=34&mode=detail

O puede descargar la versión gratuita Delphi Starter directamente desde su web oficial: https://www.embarcadero.com/products/delphi/starter/free-download
SITIO SEGURO...

Certificados de sitio web seguro

Haga clic para verificar

Norton Sitio seguro. Click para verificar Google Sitio seguro. Click para verificar Web Inspector Sitio seguro. Click para verificar VirusTotal Sitio seguro. Click para verificar URLVoid Sitio seguro. Click para verificar IsItHacked Sitio seguro. Click para verificar Sucuri SiteCheck Qualys SSL Digicert SSL Certificado de seguridad del sitio
 
DESCARGAR...
Delphi Source Code
Ejecutar App externa



Descargar Ejecutar App externa Windows 10 Compatible


MECANET.OFFICE...
MecaNet + LibreOffice + OpenOffice



DESCARGAR MECANET...
MecaNet.Office - Descargar
MecaNet.Office
Necesitará 1.7 GB de espacio libre en disco para la descarga e instalación
MecaNet DVD Descargar MecaNet.Office
Puede descargar los archivos individuales de cada una de las modalidades del curso
Collection Plus Portable Basic Teclado

DESCARGAR...
logo-MecaNet
Certificado de seguridad del sitio













Los autores del curso MecaNet le agradecemos mucho que acepte la publicidad en nuestro sitio web.

Nuestra publicidad "NO ES INTRUSIVA" y le permite poder utilizar nuestro software GRATIS y sin restricciones.

GRACIAS por su colaboración

cursomecanet.com
Política de cookies