Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Scan Url de IEFrame [ Windows / Réseau & Internet ] (bilal)

vendredi 5 octobre 2007 à 00:19:14 | Scan Url de IEFrame

bilal

voici un code qui devrait fonctionner mais je suis bloqué a 2 lignes
je l'ai traduit pour le c++ builer 6, compilation 5/5

[CODE]
Exemple de récupération de Handle avec FindWindow et
FindWindowEx, et récupération de texte d'un Edit d'une
application externe

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{------------------------------------------------------------
ATTENTION : S'il y a plusieurs instances de l'Explorateur ou
d'Internet Explorer, ce code prendra la première fenêtre dans
l'ordre Z, si l'on veut sélectionner la bonne fenêtre, il faut
utiliser un autre code
-------------------------------------------------------------}

//Récupération de l'URL en cours dans Internet Explorer
function GetCurrentInternetExplorerURL:string;
var Explorer,ClientWork,Toolbar,ComboBox,ComboBoxChild,Edit:HWND;
Mem:integer;
begin

//Retrouve le Handle de la fenêtre principale
Explorer:=FindWindow('IEFrame',nil);
if Explorer=0 then
Result:=''
else
begin
//Cherche le Handle de la fenêtre de travail
ClientWork:=FindWindowEx(Explorer,0,'WorkerA',nil);
if ClientWork=0 then
//Compatibilité XP / 98
ClientWork:=FindWindowEx(Explorer,0,'WorkerW',nil);
//Retrouve le Handle de la ToolBar
Toolbar:=FindWindowEx(ClientWork,0,'ReBarWindow32',nil);
//Cherche le Handle du ComboBox
ComboBox:=FindWindowEx(Toolbar,0,'ComboBoxEx32', nil);
ComboBoxChild:=FindWindowEx(ComboBox,0,'ComboBox',nil);
//Atteint l'Edit et envoie un message pour avoir le texte
Edit:=FindWindowEx(ComboBoxChild,0,'Edit',nil);
Mem:=SendMessage(Edit,WM_GETTEXTLENGTH,0,0)+1;
SetLength(Result,Mem);
//Envoi du message
SendMessage(Edit,WM_GETTEXT,Mem,Integer(@Result[1]));
end;
end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Label1.Caption:= GetCurrentInternetExplorerURL;

end;

end.
[/CODE]

  tout est ok mais je n'obtient aucun resultat !!?  

SetLength(Result,Mem);

//Envoi du message
SendMessage(Edit,WM_GETTEXT,Mem,Integer(@Result[1]));
  j'ai traduit c'est 2 lignes mais toujours rien par :

  char *Result; 
  Result= new char[Mem+1];
  GetWindowText(Edit,Result,Mem+1);
  listView->Items->Add( Result );

  ou

   char Result[128];
   GetWindowText(Edit, Result, 256);
   SendMessage(listView->Handle , LB_ADDSTRING, 0, (long)Result);


merci d'avance
Vegeta

dimanche 7 octobre 2007 à 16:17:49 | Re : Scan Url de IEFrame

bilal

Réponse acceptée !
mon problem est resolu !

voici mon code :


Le problem que j'avais est que mon IE6 contient la toolbar msn !!

ce qui me permet d'avoir plusieurs fenettres dans 1 grace aux onglets



la methode de lire les url ne fonctionne pas si on utilise des onglets !!!



je vais quant meme essayer trouver une solution global !

pour Mozilla qu'elle est le chemin ?

Avec ma methode je peux afficher les classes enfants et ......



voici ma methode pour c++builder 6


void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form1->listView->Items->Clear();
   EnumWindows(WNDENUMPROC (EnumWindowsProc), 0);
}

LRESULT CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
  char szClass[128];
  GetClassName( hwnd, szClass, sizeof(szClass) );

 if(!strcmp(szClass, "IEFrame"))
 {
   // Recherche des classes Enfants
     EnumChildWindows(hwnd, WNDENUMPROC(EnumChildProc),0); 

    char szTitre[128];
    GetWindowTextA(hwnd, szTitre, sizeof(szTitre));

   bool trouver = false;
  for(  int i=0; i<Form1->listView->Items->Count  && trouver==false;           i++ )
    {
      if( AnsiString(szTitre) == Form1->listView->Items->Strings[i] )
      trouver = true;
    }

    if(!trouver)   // titre des nouvelles fenetre IE
    Form1->listView->Items->Add( szTitre ); 
 }
  return true;
}


LRESULT CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
  // Type de classe enfant :
 // WorkerW/A; ReBarWindow32; ComboBoxEx32; ComboBox; Edit.

  char szClass[128];
  GetClassName( hwnd, szClass, sizeof(szClass) );

  if(!strcmp(szClass, "Edit"))
  {
    char szTitre[128];
    SendMessage(hwnd,WM_GETTEXT,sizeof(szTitre),LPARAM(szTitre));
    Form1->listView->Items->Add( szTitre );
  }

 return true;
}

Voilà

Vegeta



Cette discussion est classé dans : edit, handle, result, nil, mem


Répondre à ce message

Sujets en rapport avec ce message

Nom d'une Font à partir de son handle. [ par HeavenForsaker ] Bonjour, J'aimerai obtenir le nom de la police d'un contrôle Edit d'une application externe à partir de son handle. Pour le handle la fonction est l police d'edit de boite de dialogue [ par by_rabbit_08 ] Bonsoir!J'ai une boite de dialogue, crée dans un fichier resource, dans la quelle j'ai un edit. Comment est-ce que je fais changer la police de cet ed HINSTANCE / HANDLE [ par Ombitious_Developper ] Salut :Quelle est la différence entre un HANDLE et un HINSTANCE? Est ce que la conversion HANDLE-->HINSTANCE est valide? Est ce que la fonctions mem ou str ? [ par HeavenForsaker ] Bonjour,Quels fonctions doit on utiliser de préférence entre memcpy et strncpy par exemple, sont elles strictement identique point de vue performance getoenfilename -> ??? [ par stefbuet ] salut,sur une source (http://www.cppfrance.com/code.aspx?ID=28478)j'ai extrait une fonction de la librairy créé et ais essayé de la faire fonctioner, edit box message box et une button [ par unionx ] bonjour a tous sous MFC j'ai une button et un edit box et quand on click sur le button le text de edit box va affiché sur un MessageBox , comment je v Problème de compilation [ par killer75 ] Voici donc mon pb:helpers.h #ifndef _HELPERS_H# define _HELPERS_H#include long strToLong(std::string const &a, int b);long strToLongDef(std::stri HEXADECIMALE [ par nicompx ] Bonjour,Pouvez-vous me dire comment placer le résultat d'une requête MySQL (API C) dans un emplacement mémoire et l'afficher?En sachant que le résulta Mask Edit sous fond transparent [ par toxjamescook ] Bonjour,j'aimerais savoir si il est possible de rendre le fond transparent d'un Mask Edit ou d'un Edit. j'ai pu voir pas mal de code permettant de cha


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.