EnumWindows et FindWindow

anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006 - 31 déc. 2005 à 14:28
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 - 1 janv. 2006 à 14:08
salut !!
malgré mes recherches ,j'ai pas pu bien comprendre le fonctionnement des fonctions enumwindows et findwindow .ça sera simpa si on m'aide a repondre a ces questions :
1- d'apres les sources que j'ai trouvé ,je crois que enumwindows associr le procedure passe en 1 parametre au thread passé en 2 parametre .mais comment obtenur le handle d'un controles trouver dans la fenetre principale sans connaitre son id ??
2-comment faire fonctionner FindWindow?
3- le procedure passe en paratre doit il avoir lui aussi 2 parametre ?
4- comment sont ils identifie ?
5- comment faire parcourir les controles de meme type un par un ?
merçi d'avance
A voir également:

5 réponses

anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
31 déc. 2005 à 17:06
voila j'ai essayé de parcourir les controles d'un programme mais ça n'a pas marché :

#include <windows.h>
HWND Hwnd ;
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
Hwnd = GetNextWindow(hwnd,GW_HWNDNEXT) ;
for(int a =0 ; a < 5 ; a++)
{
SendMessage(Hwnd,MOUSEEVENTF_LEFTDOWN,0,0) ;
}
MessageBox(hwnd,"press\n","probleme",MB_OK) ;

return 1; // POUR CONTINUER
}



int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
PROCESS_INFORMATION pi;
STARTUPINFO si = {sizeof(si)};
char szbuff[260];
DWORD pid ;

strcpy(szbuff,"a.exe") ;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWMAXIMIZED;
CreateProcess(szbuff, 0, 0, 0, 0, 0, 0, 0, &si, &pi);
pid = pi.dwThreadId; // IMPORTANT !!!
EnumWindows(EnumWindowsProc, (LPARAM) pid);
return 1 ;
}
0
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
31 déc. 2005 à 18:14
j'ai pu obtenir un handle sur la fenetre ,il ne me reste que savoir comment je peux obtenir un handle la 1 fenetre child situé dans cette fenetre .merçi d'avance
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
1 janv. 2006 à 02:39
/**
* \fn BOOL CALLBACK CloseAllEnum(HWND hwnd, LPARAM lparam)
* Fonction callback d'une fonction énumérant des fenetres.
* Fermeture d'une fenetre enfant
* \brief Fermeture d'une fenetre enfant
* \param hwnd Handle de la fenetre donné par la fonction EnumChildWindows
* \param lparam 0: Inutilisé; !0:Adresse d'une chaine de caractère décrivant le classname des fenetres à fermer
*/
int CALLBACK CloseAllEnum(HWND hwnd, LPARAM lparam)
{
if (lparam == 0)
{
if (!GetWindow(hwnd, GW_OWNER))
DestroyWindow(hwnd);
}
else
{
char buffer[256];

GetClassName(hwnd, buffer, 255);
if (stricmp((LPSTR) lparam, buffer) == 0)
if (!GetWindow(hwnd, GW_OWNER))
DestroyWindow(hwnd);
}
return 1;
}

/**
* \fn void closeAllChild(HWND parent)
* Fermeture de toutes les fenetres enfants
* \brief Fermeture des enfants
* \param parent Handle de la fentre parent
*/
void closeAllChild(HWND parent)
{
EnumChildWindows(parent, CloseAllEnum, 0L);
}

/**
* \fn void closeAllChildClass(HWND parent, char *classname)
* Fermeture de toutes les fenetres enfants d'un type particulier
* \brief Fermeture des enfants
* \param parent Handle de la fentre parent
* \param *classname Classname des fenetres à fermer
*/
void closeAllChildClass(HWND parent, char *classname)
{
EnumChildWindows(parent, CloseAllEnum, (LPARAM) (LPSTR) classname);
}

En gros, ces fonctions ferment tous les controles enfants d'une fenetre en les parcouarnt un par un. En changeant la fonction CloseAllEnum, tu peux faire faire ce que tu veux à chacun des composants de la fenetre parent. Si tu cherches a travailler sur un type de comoosant particulier, utilise le classname de ce composant.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
1 janv. 2006 à 11:56
merçi pour l'explication ,cepandant j'ai pas compris l'interret de cette ligne :
if (!GetWindow(hwnd, GW_OWNER))

merçi d'avance
0

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

Posez votre question
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
1 janv. 2006 à 14:08
Je crois bien qu'elle ne me sert a rien du tout. (Je vois plus pourquoi elle est la), j'ai meme l'impression que c'est une erreur.
Mais l'intéret pour toi n'est pas la.
C'est cette fonction (CloseAllEnum) qu'il faut que tu refasses pour faire ce que tu veux avec tous les controles de ta fenetre..

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
Rejoignez-nous