Récupération de l'url courante dans internet explorer

Contenu du snippet

Bonjour à tous,
Ce petit code permet de récupérer l'URL de la page web courante dans Internet Explorer. Plus précisément, il récupère le texte de l'Edit de la barre d'adresses grâce à l'API FindWindowEx().

Pour connaître en détail la hiérarchie de composants graphiques d'une application, 2 solutions:
- Spy++, présent dans le répertoire de Visual Studio
- Windowse, freeware accessible à l'adresse suivante: http://www.greatis.com/delphicb/windowse/

3 remarques:
- code compatible IE seulement
- dans le cas de plusieurs instances IE, seule celle avec le focus est prise en compte
- idem dans le cas des onglets, seul celui qui a le focus est pris en compte

Source / Exemple :


#include <Windows.h>
#include <stdio.h>

// Fonction qui récupère l'URL courante d'Internet Explorer
char * GetCurrentURLFromIE(void)
{
  HWND hWnd,hWnd2,hWnd3;  // Handles de fenêtre
  DWORD size;             // Taille URL
  char * pURL=NULL;       // Buffer de sortie

  // Récupération du handle de la fenêtre de IE
  hWnd = FindWindow("IEFrame",NULL);
  if (hWnd)
  {
    // Parcours de la hiérarchie de classes (merci Spy++) pour trouver l'Edit contenant l'URL
    hWnd=FindWindowEx(hWnd,0,"WorkerW",NULL);               // Fenêtre de travail
    hWnd=FindWindowEx(hWnd,0,"ReBarWindow32",NULL);         // Toolbar
    hWnd2=FindWindowEx(hWnd,0,"Address Band Root",NULL);    // Bandeau, IE 7
    if(hWnd2)
      hWnd=hWnd2;
    hWnd3=FindWindowEx(hWnd,0,"ComboBoxEx32",NULL);         // Combo Box Entendue, pas sous IE8
    if(hWnd3)
      hWnd=hWnd3;
    hWnd3=FindWindowEx(hWnd,0,"ComboBox",NULL);             // Combo Box, pas sous IE8
    if(hWnd3)
      hWnd=hWnd3;
    hWnd=FindWindowEx(hWnd,0,"Edit",NULL);                  // Edit contenant l'URL

    // Récupération de la taille de la chaine et allocation du buffer en conséquence
    size=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0);
    pURL=(char *)malloc(size+1);

    // Get de l'URL
    SendMessage(hWnd,WM_GETTEXT,size+1,(DWORD)pURL);
  }

  return pURL;
}

int main(int argc, char *argv[])
{
  char lastURL[MAX_PATH];  // Dernière URL visitée
  char * pURL=NULL;        // URL courante

  while (1)
  {
    // Récupération de l'URL courante dans IE
    pURL=GetCurrentURLFromIE();

    // Si changement, affichage et stockage de l'URL
    if (pURL!=NULL && stricmp(lastURL,pURL))
    {
      strcpy(lastURL,pURL);
      printf("URL: %s\n",pURL);
    }

    free(pURL);
    Sleep(500);
  }

  return 0;
}

Conclusion :


Testé sous IE 5.x, IE 6, IE 7, IE 8

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.