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

Abrir aplicaciones externas desde C++

dic 04, 2009 en Artículos por alfredo

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++.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

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.


Autor: alfredo


Comentarios (4)

Memo dice:

una pregunta
con el shellexecute igual se queda nuestro
programa esperando hasta que la aplicacion se cierre??
o continua trabjando??

Te podría dar la respuesta pero me parece más interesante que lo descubras por tu cuenta. Simplemente haz un programa que llame al shellexecute y que luego haga “algo más”. Si tu programa realiza el “algo más” antes de que cierres el programa que abriste entonces….

Judith dice:

Hola, gracias por el articulo, me ayudo a resolver algunas dudas que tenia.. la funcion shell o shellexecute la utilizo para abrir documentos, pero sabes si existe la manera de abrir alguna aplicacion y enviarle parametros (informacion) para que la aplicacion se ejecute desde otra?

Yelinna dice:

Por alguna razón, desde VB6, ShellExecute funciona bien si se usa para abrir archivos, pero devuelve error 42 si se quiere usar para ejecutar programas.

Deja un comentario

   

copstone en Facebook

Otros artículos

Aunque no tan visual pero si súper efectivo. En Linux podemos programar aplicaciones que nos saquen de problemas rápidamente. En esta ocasión, veremos cómo podemos hacer uso de Shell scrpits en Linux, aprendiendo la sintaxis de una de estos scripts.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

Los archivos bat son pequeños programas de Windows que podemos crear muy rápidamente y son muy útiles para realizar tareas repetitivas y tediosas. Se pueden crear archivos bat para borrar archivos temporales o cookies, copiar carpetas, realizar backups e inclusive para mandar archivos a través de una red. En este artículo voy a mostrar algunos trucos para la creación de archivos bat.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

Sabías que puedes configurar tu aplicación con sólo cambiar unos valores y sin necesidad de estar ejecutándola constantemente?. Te dejo este post para que aprendas lo fácil que es y sobre todo lo útil que puede resultarte.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

Si te la pasas gran parte del dia frente a una PC probablemente hay líneas de texto o código que escribes todo el tiempo. Inclusive deben existir tareas que las repites varias veces al día. Para reducir el tiempo que pierdes en esto existe Texter.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

Antes de comenzar a desarrollar aplicaciones web, es necesario que tengas un ambiente de prueba donde puedas experimentar antes de publicar tu contenido en la web. El primer paso para crear el ambiente es instalar un servidor web o http y eso es lo que te mostraré en este artículo.

FacebookGoogle BookmarksGoogle GmailTwitterYahoo MailHotmailLinkedInShare

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
TIENES ALGO QUE PREGUNTAR? ESCRÍBENOS AQUÍ

Copyright © 2012 - Programando por diversion

Subir