y luego usar Process::Start("nombredelprograma.exe");
también se puede poner la ruta absoluta pero con dobles \\ e incluso añadir qué archivo abrir.
Process::Start("notepad.exe","miarchivo.txt");
Otras maneras
En C la forma clásica (también compatible en C++) es emplear el comando system, pero para Windows también existe otro comando llamado ShellExecute.
system | Permite ejecutar cualquier instrucción que sea interpretada por una línea de comandos. |
ShellExecute | Permite abrir archivos, carpetas y ejecutar programas en Windows. |
A continuación veremos cómo utilizar cada uno de ellos.
Se recomienda incluir los includes:
#include <process.h>
#include <Windows.h>
Empleando system
El comando system se encuentra en la librería estándar stdlib.h por lo que funciona (como dijimos al comienzo) en cualquier sistema operativo que sea capaz de compilar C/C++.
Este comando recibe como único parámetro una cadena de caracteres que indica la instrucción que se desea introducir en en el intérprete de comandos (Terminal, cmd, etc).
Debe tenerse en cuenta que el argumento (parámetro) que es enviado en la función es exactamente el que recibirá el intérprete del Sistema Operativo que se esté utilizando, por lo que si ese comando no existe, simplemente no funcionará.
A continuación voy a dejar una tabla que tomé prestada de copstone, que me parece muy bien resumida:
Debe tenerse en cuenta que el argumento (parámetro) que es enviado en la función es exactamente el que recibirá el intérprete del Sistema Operativo que se esté utilizando, por lo que si ese comando no existe, simplemente no funcionará.
A continuación voy a dejar una tabla que tomé prestada de copstone, que me parece muy bien resumida:
S.O. | Comando | Descripción | ||
---|---|---|---|---|
Windows |
| Abre el programa Notepad.Esto solo funciona porque notepad.exe se encuentra dentro del PATH de Windows. | ||
Linux |
| Abre el programa gedit. | ||
Windows |
| Abre el programa tablas.exe ubicado en la ruta C:\\Copstone. | ||
Linux |
| Abre el programa tablas ubicado en la ruta /home/copstone | ||
Windows |
| Abre el programa Notepad y carga el archivo prueba.txt ubicado en el disco C | ||
Windows |
| Muy parecido al programa anterior pero deja que el sistema operativo decida con que programa abrir el documento de texto. |
Este comando posee una clara desventaja (o característica a tener en cuenta): Toda la aplicación quedará esperando hasta que se haya finalizado la ejecución del system.
Ejemplo:
1 | #include <stdio.h> |
2 | #include <stdlib.h> |
3 | int main() |
4 | { |
5 |
printf ( "Se esta por abrir notepad\n" ); |
6 |
system ( "notepad.exe" ); |
7 |
printf ( "Se termino de ejecutar notepad\n" ); |
8 |
return 0; |
9 | } |
Utilizando ShellExecute (sólo Windows)
El comando ShellExecute funciona solamente en Windows y necesita la libreía windows.h. Este comando permite obviar las desventajas del comando system. La sintáxis del comando es la siguiente:
1 | HINSTANCE ShellExecute( HWND , LPCTSTR , LPCTSTR , LPCTSTR , LPCTSTR , INT ); |
Donde los parámetros son los siguientes:
# | Tipo | Descripción |
---|---|---|
1 | HWND | La aplicación que tiene el control. Este parámetro no es indispensable y por lo general si pasamos NULL es suficiente. |
2 | LPCTSTR | Una cadena de texto que indica el tipo de comando a procesar. Puede ser: edit, open, explore, find, print y NULL.Para convertir una cadena de texto a LPCTSTR podemos utilizar la función TEXT |
3 | LPCTSTR | Una cadena de texto con la ruta completa del archivo o carpeta a procesar.Para convertir una cadena de texto a LPCTSTR podemos utilizar la función TEXT |
4 | LPCTSTR | Una cadena de texto con los parámetros a enviar a la aplicación. Si no existen parámetros se puede mandar NULL.Para convertir una cadena de texto a LPCTSTR podemos utilizar la función TEXT |
5 | LPCTSTR | Una cadena de texto con la ruta del directorio que se utilizará como base al momento de ejecutar el comando. Este parámetro por lo general es NULL.Para convertir una cadena de texto a LPCTSTR podemos utilizar la función TEXT |
6 | INT | Un entero que indica como se desea mostrar la aplicación. Se recomienda utilizar las constantes predefinidas siendo las más comunes las siguientes:SW_SHOWNORMAL , SW_SHOWMINIMIZED , SW_SHOWMAXIMIZED y SW_HIDE |
Para mayor información acerca de los parámetros y lo que hace cada uno de ellos visita http://msdn.microsoft.com/en-us/library/bb762153%28VS.85%29.aspx
Suficiente teoría, ahora vamos a la práctica con unos cuantos ejemplos:
Abrir notepad
1 | ShellExecute(NULL, TEXT( "open" ), TEXT( "notepad.exe" ), NULL, NULL, SW_SHOWNORMAL); |
Abrir notepad con un archivo de texto
1 | ShellExecute(NULL, TEXT( "open" ), TEXT( "notepad.exe" ), TEXT( "C:\\prueba.txt" ), NULL, SW_SHOWNORMAL); |
Abrir un archivo de texto con el editor predefinido
1 | ShellExecute(NULL, TEXT( "open" ), TEXT( "C:\\prueba.txt" ), NULL, NULL, SW_SHOWNORMAL); |
Abrir un programa externo
1 | ShellExecute(NULL, TEXT( "open" ), TEXT( "C:\\Binarios\\tablas.exe" ), NULL, NULL, SW_SHOWNORMAL); |
Abrir un programa externo y que comience maximizado
1 | ShellExecute(NULL, TEXT( "open" ), TEXT( "C:\\Binarios\\tablas.exe" ), NULL, NULL, SW_MAXIMIZE); |
Abrir un programa externo y que permanezca oculto
1 | ShellExecute(NULL, TEXT( "open" ), TEXT( "C:\\ Binarios \\tablas.exe" ), NULL, NULL, SW_HIDE); |
Como el programa está oculto parece que esto no funciona, pero si entras al administrador de tareas verás que el proceso tablas.exe está corriendo.
Abrir una página web
1 | ShellExecute(NULL, TEXT( "open" ), TEXT( "http://binari-os.com.ar" ), NULL, NULL, SW_SHOWNORMAL); |
Abrir un directorio
1 | ShellExecute(NULL, TEXT( "open" ), TEXT( "C:\\ Binarios \\" ), NULL, NULL, SW_SHOWNORMAL); |
Abrir un directorio mostrando las jerarquía de carpetas
1 | ShellExecute(NULL, TEXT( "explore" ), TEXT( "C:\\ Binarios \\" ), NULL, NULL, SW_SHOWNORMAL); |
Imprimir un documento de texto
1 | ShellExecute(NULL, TEXT( "print" ), TEXT( "C:\\ Binarios \\prueba.txt" ), NULL, NULL, SW_SHOWNORMAL); |
NOTA: Si estás tratando de utilizar ShellExecute en Visual Studio C++ para una aplicación de entorno visual, es probable que te aparezca un error de compilación como el siguiente:
1 | unresolved external symbol "extern " C" struct HINSTANCE__ * __stdcall ShellExecuteW |
Para solucionar este problema basta que vayas a la opción del menú Project –> Properties –> Configuration Properties –> Linker –> Input y agrega shell32.lib en la parte de Additional Dependencies.
No hay comentarios:
Publicar un comentario
Gracias por comentar en mi blog. Saludos.