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