Home :: Windows :: Artículos :: Abrir aplicaciones externas desde C++
 

Abrir aplicaciones externas desde C++

Dic 04, 2009 en Artículos por Alfredo Granda

Muchas veces es necesario crear aplicaciones que permitan abrir otros programas o aplicaciones como por ejemplo hojas de cálculo, documentos de texto, reportes etc. En este artículo te voy a mostrar como abrir programas o archivos con C++.

Existen dos formas de abrir un programa utilizando C++.

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.

Utilizando system

El comando system se encuentra en la librería estándar stdlib.h por lo que funciona en cualquier sistema operativo que tenga un compilador de C/C++ como por ejemplo Linux, Windows, etc.

Este comando recibe como parámetro una cadena de caracteres que indica la instrucción que se desea procesar. Dicha instrucción es pasada al intérprete de comandos del ambiente en el que se esté trabajando y se ejecuta. Ten en cuenta que el intérprete de comandos realiza todo el trabajo, por lo que si tu ambiente de trabajo no cuenta con uno este comando no funcionará. Por defecto Windows viene con Command Prompt y Linux con el Terminal.

En lugar de perder más tiempo hablando de como funciona les voy a mostrar algunos ejemplos de lo que se puede hacer con el comando system. Acuérdense de que esto depende del ambiente por lo que voy a poner algunos ejemplos para Linux y otros para Windows.

S.O. Comando Descripción
Windows
system("notepad.exe");
Abre el programa Notepad.Esto solo funciona porque notepad.exe se encuentra dentro del PATH de Windows.
Linux
system("gedit");
Abre el programa gedit.
Windows
system("C:\\Copstone\\tablas.exe");
Abre el programa tablas.exe ubicado en la ruta C:\\Copstone.
Linux
system("/home/copstone/tablas"); 
Abre el programa tablas ubicado en la ruta /home/copstone
Windows
system("notepad.exe C:\\prueba.txt");
Abre el programa Notepad y carga el archivo prueba.txt ubicado en el disco C
Windows
system("C:\\prueba.txt");
Muy parecido al programa anterior pero deja que el sistema operativo decida con que programa abrir el documento de texto.

En términos generales, cualquier instrucción que se pueda realizar desde la línea de comandos se puede realizar desde un programa en C++ utilizando el comando system.

Prueba creando directorios, eliminando y copiando archivos, mostrando una lista de los directorios, cambiando nombre a archivos etc.

Desventajas de system al momento de abrir aplicaciones externas

Nuestro programa se queda esperando.- Cuando utilizamos el comando system, nuestro programa se queda esperando hasta que se termine de ejecutar el comando solicitado. En el caso de que solicitemos abrir otra aplicación, nuestro programa deberá esperar hasta que la aplicación se cierre.

Ejemplo:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("Se esta por abrir notepad\n");
    system("notepad.exe");
    printf("Se termino de ejecutar notepad\n");
    return 0;
}

En el ejemplo anterior el mensaje “Se esta por abrir notepad” se muestra justo antes de que se ejecute la aplicación Notepad, sin embargo el segundo mensaje “Se termino de ejecutar notepad” se mostrará recién cuando cerremos el notepad.

En entorno visual aparece la ventana del intérprete de comandos.- Cuando ejecutamos este comando en una aplicación en entorno visual, vemos una pantalla con el intérprete de comandos que puede ser molesta para el usuario.

Utilizando ShellExecute

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:

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

ShellExecute(NULL, TEXT("open"), TEXT("notepad.exe"), NULL, NULL, SW_SHOWNORMAL); 

 

Abrir notepad con un archivo de texto

ShellExecute(NULL, TEXT("open"), TEXT("notepad.exe"), TEXT("C:\\prueba.txt"), NULL, SW_SHOWNORMAL);

 

Abrir un archivo de texto con el editor predefinido

ShellExecute(NULL, TEXT("open"), TEXT("C:\\prueba.txt"), NULL, NULL, SW_SHOWNORMAL); 

 

Abrir un programa externo

ShellExecute(NULL, TEXT("open"), TEXT("C:\\Copstone\\tablas.exe"), NULL, NULL, SW_SHOWNORMAL);

 

Abrir un programa externo y que comience maximizado

ShellExecute(NULL, TEXT("open"), TEXT("C:\\Copstone\\tablas.exe"), NULL, NULL, SW_MAXIMIZE);

 

Abrir un programa externo y que permanezca oculto

ShellExecute(NULL, TEXT("open"), TEXT("C:\\Copstone\\tablas.exe"), NULL, NULL, SW_HIDE);

Como el programa está oculto parece que esto no funciona, pero si entras al administrador de tareas puedes ver que tu proceso tablas.exe está corriendo. 

 

Abrir una página web

ShellExecute(NULL, TEXT("open"), TEXT("http://copstone.com"), NULL, NULL, SW_SHOWNORMAL);

 

Abrir un directorio

ShellExecute(NULL, TEXT("open"), TEXT("C:\\Copstone\\"), NULL, NULL, SW_SHOWNORMAL); 

 

Abrir un directorio mostrando las jerarquía de carpetas

ShellExecute(NULL, TEXT("explore"), TEXT("C:\\Copstone\\"), NULL, NULL, SW_SHOWNORMAL);

 

Imprimir un documento de texto

ShellExecute(NULL, TEXT("print"), TEXT("C:\\Copstone\\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:

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.

En resumen

Son muchas las cosas que se pueden hacer con los comandos system y ShellExecute, te recomiendo que pruebes las diferentes combinaciones para que veas todo lo que se puede hacer.

  • Facebook
  • Google Bookmarks
  • Google Gmail
  • Twitter
  • Yahoo Mail
  • Hotmail
  • LinkedIn
  • Share/Bookmark

Autor: Alfredo Granda

Se que tengo que hablar de mi, pero no se por donde comenzar. Empezare diciendo que me llamo Alfredo, y si de colores me hablas, el verde es el que prefiero. Una gaseosa es infaltable y aunque intenté dejarlo, debo de confesar que me duro poco el no fumar. Si me hablas de software, te dire que "Sólo C que programando C++", pero también convivo sin problemas con PHP y C#. En mis ratos libres me dedico a programar y si me preguntas algo más tengo una esposa que adoro y que nunca voy a dejar.


Deja un comentario

   

copstone en Facebook

Calendario

Diciembre 2009
L M X J V S D
« Nov   Ene »
 123456
78910111213
14151617181920
21222324252627
28293031  

Categorías

Comparte este artículo

  • Facebook
  • Google Bookmarks
  • Google Gmail
  • Twitter
  • Yahoo Mail
  • Hotmail
  • LinkedIn
  • Share/Bookmark
TIENES ALGO QUE PREGUNTAR? ESCRÍBENOS AQUÍ

Copyright © 2010 - Programando por diversion

Subir