Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Comunicacion entre el navegador y mi aplicacion

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Comunicacion entre el navegador y mi aplicacion Responder citando

Hola!!!
Necesito mostrar en una ventana de mi aplicacion los enlaces contenidos en la página web que esté cargada en el navegador predeterminado, pero no se como acceder al codigo HTML de dicha página.
¿Alguien puede ayudarme Question

Muchas gracias de antemano y felicidades a los creadores de este maravilloso foro.
Volver arriba
Mensaje    Asunto: Responder citando

Yo estoy buscando exactamente lo mismo. A ver si alguien nos hecha una mano. Shocked
Volver arriba
Mensaje    Asunto: Responder citando

Ah! Por cierto, se me olvidaba. Si lees un post mio por ahí abajo, verás que venía usando los componenes indy para este tema. Pero, el problema es que no funciona con todas las url. No sé si tendrá que ver con el java script de los coj... o con el servidor... o con qué narices. Pero igual para la web que quieres abrir tú te sirve. Es cuestión de probar.

Un saludo
Volver arriba
Mensaje    Asunto: Responder citando

Hola:

Si te vale abriendo un nuevo explorer con el enlace que quieras y obtener la lista de enlaces. Aquí va un ejemplo, para probarlo añade un TListBox (ListBox1) y un botón a tu form, y en el OnClick del mismo:
Código:
// Añadimos: #include<mshtml.h> #include<Comobj.hpp> #include<utilcls.h>

// Cargamos el IExplorer
Variant IE = CreateOleObject("InternetExplorer.Application");

// Lo hacemos visible si nos interesa
IE.OlePropertySet("Visible", true);

// Cargamos alguna página
IE.OleFunction("Navigate", "www.borland.es");

// Esperamos a que termine de cargarse
while (IE.OlePropertyGet("Busy"))
    Application->ProcessMessages();

Application->BringToFront();

if (VarType(IE.OlePropertyGet("document"))!=varEmpty)
{
    // Repetimos la espera por seguridad
    while (IE.OlePropertyGet("Busy"))
        Application->ProcessMessages();

    // Obtenemos un puntero a la interface del documento
    IHTMLDocument2 * pDocument;
    IDispatch* disp =
            static_cast<IDispatch*>(IE.OlePropertyGet("document"));
    disp->QueryInterface(IID_IHTMLDocument2,
            reinterpret_cast<void**>(&pDocument));
    disp->Release();

    // Obtenemos el conjunto de elementos
    IHTMLElementCollection* pElementCollection;
    pDocument->get_links(&pElementCollection);

    // El numero de enlaces
    long numEnlaces;
    pElementCollection->get_length(&numEnlaces);

    // Recorremos la lista de enlaces rellenando el ListBox
    ListBox1->Clear();
    ListBox1->Items->Add(String().sprintf(
            "Hay %d enlaces.", numEnlaces));
    while (numEnlaces--)
    {
        Variant indice = numEnlaces;
        pElementCollection->item(indice, indice, &disp);
        IHTMLElement* pElement;
        disp->QueryInterface(IID_IHTMLElement,
                reinterpret_cast<void**>(&pElement));
        disp->Release();

        WideString str;
        pElement->toString(&str);
        ListBox1->Items->Add(str);
        pElement->Release();
    }

    pElementCollection->Release();
    pDocument->Release();
}

// Podemos cerrarlo
// IE.OleProcedure("Quit");

Esta probado en el BCB4 por tanto debería ir bien en versiones superiores. Aunque si usas versiones superiores quizás te sea mejor usando el componente TCppWebBrowser (también se puede añadir fácilmente a otras versiones...)

Y si lo que quieres es obtener los enlaces de un navegador que ya estuviese abierto la cosa se complica bastante, ya que se sale de lo que seria un ejemplo breve y necesitas manejarte bien con Hooks y objetos COM. En este caso te será útil un artículo de Microsoft donde se muestra como conseguir la interfaz IHTMLDocument2 desde un handle de ventana:

  [How to get IHTMLDocument from Browser Control Window Handle]
  http://support.microsoft.com/support/kb/articles/Q249/2/32.ASP

Saludos:
 _Leo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.