2008-09-30 14 views
9

Ok, probablemente tenga una respuesta realmente simple, pero nunca he intentado hacerlo antes: ¿cómo se inicia una página web desde dentro de una aplicación? Ya sabe, "haga clic aquí para ir a nuestras preguntas frecuentes", y cuando lo haga, inicia su navegador web predeterminado y va a su página. Estoy trabajando en C/C++ en Windows, pero si hay una forma más amplia y portátil de hacerlo, me gustaría saberlo también.Inicie la página web desde mi aplicación

Respuesta

17
#include <windows.h> 

void main() 
{ 
    ShellExecute(NULL, "open", "http://yourwebpage.com", 
      NULL, NULL, SW_SHOWNORMAL); 
} 
+1

¿Funciona sin privilegios de administrador? – foobar

4

Creo que desea utilizar la función ShellExecute() que debe respetar la elección de los usuarios del navegador predeterminado.

3

Puede usar la función ShellExecute. Código de ejemplo:

ShellExecute(NULL, "open", "http://stackoverflow.com", "", ".", SW_SHOWDEFAULT); 
4

Por favor, lea la docs para ShellExecute de cerca. Para realmente proteger su código a prueba de balas, recomiendan inicializar COM. Vea los documentos aquí, y busque la parte que dice "COM debe inicializarse como se muestra aquí". La respuesta corta es que hacer esto (COM si aún no lo ha init'd):

CoInitializeEx (NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

+0

Maldita COM ataca de nuevo .. – Everyone

4

Para el registro (ya que preguntas para una opción multiplataforma) , el siguiente funciona bien en Linux:

#include <unistd.h> 
#include <stdlib.h> 

void launch(const std::string &url) 
{ 
    std::string browser = getenv("BROWSER"); 
    if(browser == "") return; 

    char *args[3]; 
    args[0] = (char*)browser.c_str(); 
    args[1] = (char*)url.c_str(); 
    args[2] = 0; 

    pid_t pid = fork(); 
    if(!pid) 
    execvp(browser.c_str(), args); 
} 

Utilizar como:

launch("http://example.com"); 
+2

El env de BROWSER no está configurado en Ubuntu. Ese código se bloquea cuando getenv devuelve NULL: 'terminate called después de lanzar una instancia de 'std :: logic_error' what(): basic_string :: _ S_construct null no válido'. –

1

Por alguna razón, ShellExecute no funcionan a veces si la aplicación está a punto de termin Comimos justo después de llamarlo. Agregamos Sleep (5000) después de ShellExecute y nos ayuda.

Cuestiones relacionadas