Skip to content

Como ejecutar aplicaciones y archivos en tiempo de ejecución

Delphi, uno de los lenguajes de programación con gran historia en el medio, proporciona una forma rápida de programar, compilar, empaquetar e implementar aplicaciones multiplataforma, que entre ellas incluye Windows, Linux, Android, IOs y Mac.

En muchas ocaciones, se necesita ejecutar archivos y aplicaciones externas a nuestra interfaz, como por ejemplo, aplicaciones de actualizaciones, aplicaciones de backup, archivos de texto o cualquier otro formato sin abrir la aplicación asociada.

Para nombrar otros ejemplo, podemos enviar correos electrónicos desde nuestra aplicación y a través de una aplicación de tercero sin mucho esfuerzo.

ShellExecute o WinExec

Para ejecutar una aplicación o abrir un archivo externo a nuestra aplicación, y siempre hablando de un entorno Windows, venimos acostumbrados a utilizar WinExec.

Pero WinExec está solo disponible por compatibilidad en entornos Windows 3.x y Delphi 1, desde ya hace muchísimo tiempo tenemos que utilizar ShellExecute.

ShellExecute se encuentra en la API de Windows, y deberemos utilizar la unidad WinAPI.ShellAPI.

Ejemplos de ShellExecute

Comenzamos con un ejemplo sencillo, abrir el Netepad de Windows desde nuestra aplicación:

uses ShellApi, FMX.Platform.Win;

...

ShellExecute(FmxHandleToHWND(Handle), 'open',PChar('c:\Windows\notepad.exe'), nil, nil, SW_SHOWNORMAL);

El ejemplo anterior esta probado en FMX, si queremos realizar lo mismo en VCL sería así:

uses ShellApi;

...

ShellExecute(Handle, 'open',PChar('c:\Windows\notepad.exe'), nil, nil, SW_SHOWNORMAL);

Si nuestra necesidad es abrir el Notepad pero a su vez mostrar un archivo de texto ya guardado con anterioridad, solo agregamos en el siguiente parámetro, la ruta y nombre del archivo que queremos mostrar, como los realizamos en el siguiente ejemplo:

ShellExecute(Handle, 'open',PChar('c:\Windows\notepad.exe'), PChar('c:\archivo.txt'), nil, SW_SHOWNORMAL) ;

El siguiente ejemplo, abre un sitio web en el navegador por defecto de nuestro dispositivo:

uses ShellApi, FMX.Platform.Win;

...

ShellExecute(FmxHandleToHWND(Handle), 'open', 'https://delphidesdecero.com',nil,nil, SW_SHOWNORMAL);

Recuerde: Los parámetros de esta función deben ser de tipo PChar(), ya que al ser una función de la API de Windows, y al estar desarrollado ésta en C, PChar realiza un cast de String de Delphi a un String de C.