begin process at 2010 02 10 17:20:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > RÉCUPÉRATION DE L'URL COURANTE DANS INTERNET EXPLORER

RÉCUPÉRATION DE L'URL COURANTE DANS INTERNET EXPLORER


 Information sur la source

Note :
Aucune note
Catégorie :API Classé sous :API, URL, IE, FindWindowEx Niveau :Initié Date de création :09/12/2008 Date de mise à jour :08/02/2010 17:14:49 Vu :3 146

Auteur : buno

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note


 Description

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

  • #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;
  • }
#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


 Historique

09 décembre 2008 14:33:45 :
Correction de fuites mémoire
08 février 2010 17:14:50 :
- Bug Fix: récupération de l'URL complète (il manquait le dernier caractère) - Ajout de la compatibilité IE8, thanks to zod331

 Sources du même auteur

Source avec Zip DÉTECTION DE LANCEMENT D'APPLICATION (WIN32, REGISTERSHELLHO...
Source avec Zip Source avec une capture IMPLÉMENTATION DE LA GESTION STANDARD DES CHAINES DE CARACTÈ...
Source avec Zip PRÉSENTATION DE DOXYGEN
SUPPRIMER UNE CHAINE DE CARACTERES D'UN FICHIER
Source avec Zip LOADER BMP + TRAITEMENT

 Sources de la même categorie

Source avec Zip Source avec une capture CALENDRIER (WIN64) par BruNews
Source avec Zip Source avec une capture IMPRESSION EN WIN32 API AVEC OPTIONS par racpp
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI... par racpp
Source avec Zip Source avec une capture BROUILLAGE DES FICHIERS JAVASCRIPT ET CSS(WIN32) par gagah1
Source avec Zip Source avec une capture CHANGE CURSEUR par ganjarasta

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CALENDRIER (WIN64) par BruNews
Source avec Zip COMMENTER CODE C <=> ASM (WIN64) par BruNews
Source avec Zip Source avec une capture CHANGE CURSEUR par ganjarasta
Source avec Zip REMOTE SHELL GEN par ganjarasta
COPIE AVEC SHFILEOPERATION par steph12358

Commentaires et avis

Commentaire de BruNews le 09/12/2008 11:41:41 administrateur CS

free(pURL) mal placé, pURL peut être NULL.

Commentaire de buno le 09/12/2008 12:01:34

Euh...oui, tout à fait! J'ai même des fuites mémoires du coup...
Je modifie ça. Merci!

Commentaire de DeAtHCrAsH le 09/12/2008 18:05:26

Pour ma part je suis toujours sceptique à l'utilisation de fonction qui renvoie des pointeurs définis en local.

A ta place j'aurai plutot fait :

char * GetCurrentURLFromIE(char * psUrl)
{
  [...]
  SendMessage(hWnd,WM_GETTEXT,size,(DWORD)pURL);
  return psUrl;
}

int main(int argc, char *argv[])
{
   char * psUrl = NULL;

   if(GetCurrentURLFromIE(psUrl) != NULL && [...])
   {
      [...]
   }
}

Commentaire de f_l_a_s_h_b_a_c_k le 09/12/2008 19:48:37

Merci!
je intègre dans  mon keylogger!!

et pour mozilla a tu une solution?

Commentaire de buno le 09/12/2008 20:27:24

@DeAtHCrAsH: oui, ça se défend, ce serait peut-être plus propre...
@f_l_a_s_h_b_a_c_k: Il n'est pas possible de le faire de cette manière avec Firefox. Par contre, j'ai vu sur le net que tu peux utiliser le protocole DDE, Dynamic Data Exchange

Commentaire de Kian_ix le 10/12/2008 04:25:15

int URLIE(char * BUFF_URL) {
HWND H1 = FindWindow("IEFrame",0); if (!H1) { return 0; }
HWND H2 = FindWindowEx(FindWindowEx(FindWindowEx(H1,0,"WorkerW",0),0,"ReBarWindow32",0),0,"Address Band Root",0); if (!H2) { return 0; }
HWND H3 = FindWindowEx(FindWindowEx(FindWindowEx(H2,0,"ComboBoxEx32",0),0,"ComboBox",0),0,"Edit",0); if (!H3) { return 0; }
SendMessage(H3,WM_GETTEXT,SendMessage(H3,WM_GETTEXTLENGTH,0,0)+1,(DWORD)BUFF_URL);
return 1;
}

4 lignes qui dit mieux ^^

Commentaire de buno le 10/12/2008 09:19:28

1 ligne si tu supprimes tous les tests...
Mais ce n'est pas très malin comme jeu ;) En effet, on perd en lisibilité et facilité de debuggage

Commentaire de fregolo52 le 10/12/2008 09:41:34

Salut,

Sympa comme exemple d'utilisation de la fonction FindWindow.
On en apprend tous les jours !! Je ne savais pas qu'un SendMessage pouvais récupérer les paramètres, donc wParam et lParam sont de type in/out.

Commentaire de Kian_ix le 16/12/2008 15:44:37

#define f(a,n)FindWindowEx(a,0,n,0)
#define i(u)SendMessage(f(f(f(f(f(f(FindWindow("IEFrame",0),"WorkerW"),"ReBarWindow32"),"Address Band Root"),"ComboBoxEx32"),"ComboBox"),"Edit"),13,99,(int)u)

193 caractères ^^

Commentaire de ghanmi04_05 le 16/02/2009 10:53:40

Salut,

Quelqu'un a une idée pour IE8?
Merci(je suis bloqué)

Commentaire de buno le 16/02/2009 11:01:33

Salut Ghanmi04_05,
Avec Spy++ ou Windowse, tu peux retrouver la hiérarchie de composants graphiques pour chopper l'edit

Commentaire de ZMJUVENTINO le 03/03/2009 23:51:27

jolie mais est ce qu'il ya une solution pour firefox et les autres navigateurs

Commentaire de buno le 04/03/2009 09:26:16

Comme je l'ai dit au-dessus, il y a une solution avec Firefox qui consiste à utiliser le protocle DDE, Dynamic Data Exchange. Je n'ai pas de solution toute prête, mais à l'occasion, je regarderais...

Commentaire de buno le 06/03/2009 09:46:15

Hello,
Pour autres navigateurs, voici un code en C#:
http://www.csharpfr.com/codes/RECUPERER-URL-COURS-DANS-VOS-NAVIGATEURS-INTERNET-EXPLORER_44856.aspx

Commentaire de ZMJUVENTINO le 06/03/2009 09:55:47

Merci Buno mais le lien n'est pas bon

Commentaire de buno le 06/03/2009 10:02:11

???
Je viens de le re-tester, il est valide. Quel est le souci?

Commentaire de ZMJUVENTINO le 06/03/2009 10:21:21

Chez moi il n'est pas complet en plus il n'est pas cliquable

Commentaire de buno le 06/03/2009 10:27:11

Copier-Coller dans ta barre d'adresse ;)

Commentaire de ZMJUVENTINO le 06/03/2009 11:01:22

ça marche maintenant tout à l'heure ç m'affiche seulemnt la moitié du lien (:

Commentaire de SHURZAN le 25/01/2010 22:31:54

Hello,
Translate Turkish;

Yukaridaki örnek kod için arkadasa tesekkürler, ancak Vista ve Win7 için uyumsuz.
Çünkü; IE8 de class "ComboBoxEx32" ve "ComboBo" yoktur, O yüzden çalismayacaktir.

Asagida ugun sekilde düzeltilmis hali bulunuyor.

Basarilar, SHURZAN
//-------------------------------------------------------------------
String GetCurrentURLFromIE()
{
  HWND hWnd,hWnd2;   // Handles de fenêtre
  DWORD size;        // Taille URL
  char * pURL=NULL;  // Buffer de sortie
  String uRL;
  // Récupération du handle de la fenêtre de IE
  hWnd = FindWindow("IEFrame",NULL);
  if (hWnd)
  { try
   {
    // 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;

     hWnd2=FindWindowEx(hWnd,0,"Edit",NULL);

    if(!hWnd2)
     {
      hWnd2=FindWindowEx(hWnd,0,"ComboBoxEx32",NULL);         // Combo Box Entendue
      hWnd2=FindWindowEx(hWnd2,0,"ComboBox",NULL);              // Combo Box
      hWnd=FindWindowEx(hWnd2,0,"Edit",NULL);
     }
     else hWnd=hWnd2;

    // 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,(DWORD)pURL);
    uRL = String(pURL);
   }
   __finally
   {
   if(pURL) delete pURL; // Bellekten atilmali
   }
  }
  return uRL;
}
//------------------------------------------------------------------------

Commentaire de buno le 26/01/2010 08:58:36

Translation by Google: http://translate.google.fr/translate_t?hl=&ie=UTF-8&text=Yukaridaki+%C3%B6rnek+kod+i%C3%A7in+arkadasa+tesekk%C3%BCrler%2C+ancak+Vista+ve+Win7+i%C3%A7in+uyumsuz.%0D%0A%C3%87%C3%BCnk%C3%BC%3B+IE8+de+class+%22ComboBoxEx32%22+ve+%22ComboBo%22+yoktur%2C+O+y%C3%BCzden+%C3%A7alismayacaktir.%0D%0A%0D%0AAsagida+ugun+sekilde+d%C3%BCzeltilmis+hali+bulunuyor.%0D%0A&sl=tr&tl=fr#tr|en|Yukaridaki%20%C3%B6rnek%20kod%20i%C3%A7in%20arkadasa%20tesekk%C3%BCrler%2C%20ancak%20Vista%20ve%20Win7%20i%C3%A7in%20uyumsuz.%0A%C3%87%C3%BCnk%C3%BC%3B%20IE8%20de%20class%20%22ComboBoxEx32%22%20ve%20%22ComboBo%22%20yoktur%2C%20O%20y%C3%BCzden%20%C3%A7alismayacaktir.%0A%0AAsagida%20ugun%20sekilde%20d%C3%BCzeltilmis%20hali%20bulunuyor.%0A

If I understand, you are specifying that this code don't work with IE8. That's right, because it is not the same component tree. I will update my code during my free time.

Commentaire de zod331 le 05/02/2010 23:51:00

Bonsoir,
La fonction me renvoie AutoCompleteProx

Commentaire de buno le 06/02/2010 15:57:11

Dans quel contexte? Quel version d'IE?

Commentaire de zod331 le 06/02/2010 17:17:30

Version 8

Commentaire de zod331 le 06/02/2010 23:35:25

Le problème est résolu

Pour internet Explorer 8

Il faut supprimer ou commenter ces lignes de code
hWnd=FindWindowEx(hWnd,0,"ComboBoxEx32",NULL); // Combo Box Entendue
hWnd=FindWindowEx(hWnd,0,"ComboBox",NULL); // Combo Box

Commentaire de zod331 le 06/02/2010 23:49:12

Source modifiée pour la rendre compatible ie8

char * GetCurrentURLFromIE(void)
{
  HWND hWnd, hWnd2, hWnd3;
  DWORD size;
  char * nURL = NULL;

  hWnd = FindWindow("IEFrame",NULL);
  if (hWnd)
  {
    hWnd=FindWindowEx(hWnd,0,"WorkerW",NULL);
    hWnd=FindWindowEx(hWnd,0,"ReBarWindow32",NULL);
    hWnd2=FindWindowEx(hWnd,0,"Address Band Root",NULL);
if(hWnd2)
hWnd = hWnd2;
    hWnd3=FindWindowEx(hWnd,0,"ComboBoxEx32",NULL);
if(hWnd3)
hWnd = hWnd3;
    hWnd3=FindWindowEx(hWnd,0,"ComboBox",NULL);
if(hWnd3)
hWnd = hWnd3;
    hWnd=FindWindowEx(hWnd,0,"Edit",NULL);

    size=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0);
    nURL=(char *)malloc(size);

  }

  return pURL;
}

Commentaire de SHURZAN le 06/02/2010 23:59:40


Translete Turkish.

Hayir kaldirmaniz gerekmez. zaten ben kodun düzeltilmis halini vermistim.

Hem IE 6-7 hemde IE 8 için düzeltilmis halidir.
Dikkat ederseniz asagida degistirmis haliyle Edit Compenent araniyor bulursa içerigi okunur bulamazsa, NULL dönrese ComboBox'lari arayacak yine Edit'i bulup içerigini okur.
  
hWnd2=FindWindowEx(hWnd,0,"Edit",NULL);

    if(!hWnd2)
     {
     hWnd=FindWindowEx(hWnd,0,"WorkerW",NULL);    
     ....
     }
     else hWnd=hWnd2;

Yanliz unutulmamasi gereken konu malloc ile ayrilmis bellek sisteme geri verilmeli!..

__finally Borland'a ait sonlama, String ise gene borland nesnesi AnsiString'dir siz C++ string sinifi ile geri dönebilirsiniz.

Ben düzeltilmis halini IE 6,7,8 de basariyla kullaniyorum.

Basarilar.
SHURZAN

Commentaire de buno le 08/02/2010 17:18:50

Source mise à jour, thanks to zod331

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Intercepter l'appel d'un API [ par sebastienbro ] Bonjour,j'aurais voulus savoir s'il était possible d'intercepter l'appel d'un api, un peu comme un breakpoint dans softice, ou dans n'importe quel déb modifier l'url d'une fenetre ie déjà ouverte [ par hrp ] bonjour,comment puis-je modifier l'url d'une fenetre internet explorer en cours d'ex&#233;cution afin de la rediriger sur une autre url?merci.huw Url Valide ? : Api IsValidURL [ par Sylvainlefou ] Bonjour,j'aimerais tester la validité d'une URL grave a l'api IsValidURL.En entré, j'ai une variable "char[50]", or l'api demande une variable "const SNMP [ par andrealphus ] Est ce que quelqu'un saurait me dire comment dialoguer avec un agent snmp en c++ voire si possible en java ???Merci d'avance.Un revenant...4ndr&@lphu$ Problème avec GetWindowTextLenght [ par oceax ] Bonjour !!Voilà je suis débutant en c++ et je voudrais me familiariser avec l'utilisation de l'allocation dynamique de la mémoire. Pour mon projet j'a taille barre des taches [ par julienbj ] Comment peut-on faire pour récupérer la taille de la barre des taches?Petite précision: je travaille en C, sans les MFC!Vive le CTchaoSavon Release sous Dev-C++ [ par victorcoasne ] Bonjour,Je compile sous Dev-c++ et on me dis que je fais nimporte quoi car j'inclu les info de debug avec donc j'aimerais savoir comment compiler sans Une barre d'outils flottante en api [ par elflink ] Bonjour à tous, à toutes,Voici une question à laquelle je n'ai pas trouvé de réponse :Comment créer une barre d'outils flottante (qu'on peut déplacer Récuperer la valeur de la variable passé via l'url d'une page web [ par thunderfear ] Bonjour,en fait j'aimerai faire un programme ki est tout le temps ouvert sur le pc et k'il attend de recevoir une info mais il doit vérifier s'il y a image+texte dans un bouton [ par julienbj ] Peut-on superposer dans un bouton une image bitmap et un texte?L'un sans l'autre c'est bon, je sais faire, mais c'est quand il s'agit de mettre les de


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,669 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales