Utilisation d'une fonction callback

cs_laurentl2000 Messages postés 33 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 9 novembre 2003 - 8 nov. 2003 à 20:24
cs_bilal Messages postés 87 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 4 mars 2010 - 6 oct. 2007 à 15:26
Bonjour,

Voici une fonction callback destinée à envoyer les titres des fenêtres IE ouvertes dans une listbox...

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
        char Classe[128];
        GetClassName(hwnd, Classe, 128);
        if (Classe == "IEFrame")
        {
                char szTitre[256];
                GetWindowText(hwnd, Titre, 256);
                Form1->lbListe->AddItem(Titre, 0);
        }
        return true;
}


Comment dois-je faire, si elle est correcte, pour la faire fonctionner ? Avec EnumWindows(); ?

EnumWindows(EnumWindowsProc(?,?,?,?),0); ???

Merci d'avance,

(ce post est la suite du post sur les handles des fenêtres IE)

19 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 nov. 2003 à 20:56
Salut,

EnumWindows(EnumWindowsProc, 0);

Aucun paramettre a mettre dans la callback, il faut juste passer son adresse en param (son nom quoi).

Désolé j'aurais du le préciser tout a l'heure.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 nov. 2003 à 21:01
Salut,
J'avais pas remarqué que tu avais modifié ce que je t'avais donné:

if (Classe == "IEFrame")
ne marchera jamais, il faut utiliser strcmp(...) pour comparer 2 chaines (comme javais mis dans le code que je tavais donné).

char szTitre[256];
GetWindowText(hwnd, Titre, 256);
Tu declares szTitre et tu passe Titre en param aux fonctions en dessous...
0
cs_laurentl2000 Messages postés 33 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 9 novembre 2003
8 nov. 2003 à 21:14
Oui, excuse, erreurs d'inattention...

J'ai donc préféré recommencer en reprenant exactement le code que tu m'a passé... Mais j'obtiens ceci comme erreur à la compilation :

Construction
[C++ Erreur] Unit1.cpp(81): E2034 Impossible de convertir 'int (__stdcall *)(void *,long)' en 'int (__stdcall *)()'
[C++ Erreur] Unit1.cpp(81): E2342 Mauvaise correspondance de type dans le paramètre 'lpEnumFunc' ('int (__stdcall *)()' désiré, 'int (__stdcall *)(void *,long)' obtenu)
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 nov. 2003 à 21:22
Salut,
Moi avec EnumWindows(EnumWindowsProc, 0); j'ai aucun probleme.
Tu as bien mis ta fonction EnumWindowsProc AVANT la ligne ou tu appelles EnumWindows(..) dans le code ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_laurentl2000 Messages postés 33 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 9 novembre 2003
9 nov. 2003 à 00:05
Oui, elle a l'air bien mise pourtant... Sinon il me dirait que la fonction n'est pas définie...
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 nov. 2003 à 00:08
Salut,
Envoies ton code... betouchi@wanadoo.fr
Pas normal tout ca.
0
cs_laurentl2000 Messages postés 33 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 9 novembre 2003
9 nov. 2003 à 00:09
[...]

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
char szClass[128];
GetClassName(hwnd, szClass, 128);
if(!strcmp(szClass, "IEFrame"))
{
char szTitre[256];
GetWindowText(hwnd, szTitre, 256);
Form1->lbListe->AddItem(szTitre,0);
}
return true;
}

void __fastcall TForm1::Button4Click(TObject *Sender)
{
EnumWindows(EnumWindowsProc, 0);
}
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 nov. 2003 à 00:20
Salut,
Ben ecoute désolé, je peux pas t'aider, moi je compile sans erreur et ca marche impec.
Tu as quel compilo ?
0
cs_laurentl2000 Messages postés 33 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 9 novembre 2003
9 nov. 2003 à 00:25
Borland C++Builder...
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 nov. 2003 à 00:31
Salut,
Reste plus qu'a trouver un expert en Builder c++, pasque la je seche...
0
cs_laurentl2000 Messages postés 33 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 9 novembre 2003
9 nov. 2003 à 00:32
Et toi tu l'as compilé avec quoi ?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 nov. 2003 à 00:39
Salut,
Visual c++ 6.0
0
cs_laurentl2000 Messages postés 33 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 9 novembre 2003
9 nov. 2003 à 16:43
Pour ceux qui sèchent comme moi sur ce problème, voici la solution : convertir le type de la procédure callback en WNDENUMPROC lors de son appel par le premier paramètre de la fonction EnumWindows();...

Autrement dit, pour notre exemple, l'appeler comme ceci :
EnumWindows((WNDENUMPROC) EnumWindowsProc,0); 


http://www.developpez.net/forums/viewtopic.php?p=703006#703006
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 nov. 2003 à 16:46
Salut,
Builder c++ est vraiment bizzare.
0
cs_laurentl2000 Messages postés 33 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 9 novembre 2003
9 nov. 2003 à 16:49
Effectivement... :-\
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 nov. 2003 à 16:53
Salut,
Sinon, tu as reussi a faire ce que tu voulais au debut ?
Stocker les handles des fenetres IE dans un tableau (si mes souvenirs sont bons).
0
cs_laurentl2000 Messages postés 33 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 9 novembre 2003
9 nov. 2003 à 17:00
Oui, oui, impec... Une fois que j'ai réussi à faire cette callback je peux stocker tout ça dans un tableau et le tour est joué...

Merci ! :)
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
11 nov. 2003 à 15:45
Essaye de compiler avec un #define STRICT
0
cs_bilal Messages postés 87 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 4 mars 2010
6 oct. 2007 à 15:26
salut laurent , as tu resolu ton problem ?

merci d'avance
Vegeta
0
Rejoignez-nous