begin process at 2012 05 29 03:09:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

MFC

 > 

Distinguer des fenêtres qui ont le même handle


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Distinguer des fenêtres qui ont le même handle

mercredi 20 août 2008 à 22:25:10 | Distinguer des fenêtres qui ont le même handle

Lustuc

Bonjour,

Ma question est sans doute un peu bête, mais je nage un peu avec les handle.

J'ai une application qui ouvre plusieurs fenêtres, je voudrais pouvoir avoir le handle spécifique de l'une d'entre elle, or elles ont toute le même...

J'ai cru comprendre qui y a la notion de parent au niveau des handle. En gros je cherche à voir celui d'un des enfants


Si il y avait une bonne âme pour me montrer la lumière dans ce monde obscure des handle ça serait bien sympa...
jeudi 21 août 2008 à 00:43:06 | Re : Distinguer des fenêtres qui ont le même handle

juju12

plusieurs fenêtres ne peuvent pas avoir le même hwnd, à moins que ton application dessine elle-même les fenêtres sur un fond commun, mais dans ce cas on n'est plus vraiment dans le contexte des fenêtres de l'API. Est-ce le cas?
Sinon comment récupères-tu tes handle? Je veux dire, quel code emploies-tu (avec quels résultats) pour pouvoir dire que les fenêtres ont le même hwnd?
Les fonctions utiles pour trouver les fenêtres enfants sont par exemple EnumChildWindows(), ou FindWindowEx()...

jeudi 21 août 2008 à 01:40:58 | Re : Distinguer des fenêtres qui ont le même handle

Lustuc

Le code est le suivant :

    char caption[255];

    Sleep(5000);         // j'ai 5 seconde pour passer la première fenêtre en active

    GetWindowText(GetForegroundWindow(),caption,255);
    printf("le titre est: %s\n", caption);

    HANDLE HWND1 = FindWindow(NULL,caption);
    printf("le handle de la fenetre 1 est : %X\n\n", HWND1);

    Sleep(5000);         // j'ai 5 seconde pour passer la deuxième fenêtre en active

    GetWindowText(GetForegroundWindow(),caption,255);
    printf("le titre est: %s\n", caption);

    HANDLE HWND2 = FindWindow(NULL,caption);
    printf("le handle de la fenetre 2 est : %X\n\n", HWND2);

En résultat, il m'affiche le titre de la 1ère fenêtre avec "1008A" pour Handle

puis le titre de la seconde fenêtre avec toujours "1008A" pour Handle

L'appli génère des fenêtres, mais ces dernières ne sont pas identiques et n'ont pas la même fonction, notamment la fenêtre parent et les fenêtres enfants.

jeudi 21 août 2008 à 09:20:25 | Re : Distinguer des fenêtres qui ont le même handle

fregolo52

Membre Club
Si tu maitrises tout, c'est a dire que tu accès au code source des fenetres que tu ouvres, tu devrais passer en mode debug et regarder à qui appartient ce handle.
Si pour chaque fenetre tu as fait un CreateWindow, elles devraient toutes avoir des handles différents.

Sinon as-tu testé le retour de GetForegroundWindow() ? Pour voir si c'est les mêmes que la fonction FindWindow.
jeudi 21 août 2008 à 11:24:43 | Re : Distinguer des fenêtres qui ont le même handle

Lustuc

Il s'agit d'applications externes dont je n'ai pas accès au code.
Je début en C, comment fais-tu pour tester le code retour?
jeudi 21 août 2008 à 13:17:42 | Re : Distinguer des fenêtres qui ont le même handle

fregolo52

Membre Club

GetForegroundWindow() tu retournes le handle (hwnd) de la fenetre active de Windows (je crois).
J'aime pas trop FindWindow.

Essaie EnumWindows.

Voici mon code avec EmunChildWindows (que tu adapteras pour EnumWindows et tes besoins) qui change les libelles des controles de la fenetre dans la langue désirée :

static BOOL CALLBACK EnumControlsForLanguage(
  HWND hwnd,      // handle to child window
  LPARAM lParam   // application-defined value
)
{
 CString cs;
 int id = GetDlgCtrlID(hwnd);
 cs.LoadString(id);
 SetWindowText(hwnd, cs);
 return TRUE;
}

 EnumChildWindows(this->m_hWnd, EnumControlsForLanguage, NULL);

jeudi 21 août 2008 à 13:59:16 | Re : Distinguer des fenêtres qui ont le même handle

Lustuc

OK merci je vais essayer ce soir...
vendredi 22 août 2008 à 12:29:10 | Re : Distinguer des fenêtres qui ont le même handle

Lustuc

Réponse acceptée !
ça a marché ! ! ! avec EnumWindows.

Voici le code qui m'a permi d'afficher tous les handle avec les titres des fenêtres.
Les fenêtres qui apparaissaient avec le même handle avec la fonction FindWindow, ont ici des handle bien distincts:

La fonction :

 

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

{

    char caption[255];

    HWND hwndTable;

     if(IsWindowVisible(hwnd))

     {

        printf("handle %X\n", hwnd);

        GetWindowText(hwnd,caption,255);

        printf("titre : %s\n\n", caption);

    }

    return TRUE;

}

 

 

Appel à la fonction:

 

EnumWindows(EnumWindowsProc, 0);


Merci pour votre aide,

A+ Lustuc







Cette discussion est classée dans : handle, fenêtres, distinguer


Répondre à ce message

Sujets en rapport avec ce message

Récupérer un handle de fenêtre [ par tintin72 ] Bonjour, Je programme une classe 'Splitter' qui a besoin de récupérer le handle des fenêtres filles pour les agencer dans la fenêtre hote. J'ai donc ICON buton [ par abdoulax ] Encore une question, Je voudrai insérer une icone dans un bouton voici ce que g trouvé : SendMessage(HWND,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM)hand CopyFileEx() [ par apacheswiss ] Bonjour, je souhaite utilisé la fonction CopyFileEx()mais lors de la compilation , j'ai lerreur suivanteerror C2664: 'CopyFileExA' : cannot convert pa Handle child subclassée [ par NeoUmbrella ] Hello,J'aimerais savoir comment récupérer l'hande d'une fenetre child venant d'etre créée sachant que j'ai subclassé la fenetre mdi et que j'intercept Tuto pour les fenêtres windows [ par rastacouer ] Bonjour,Malgré mes recherches sur le forum sur ce sujet, j'ai rien trouvé, même si je m'attend quand même à ce que vous ayez déjà vu ce genre de topic HANDLE de fichiers [ par vecchio56 ] Salut J'ai un programme qui travaille sur des fichiers, et l'utilisateur peut enregistrer le fichier quand il le veut. La question que je me pose est PROCESS_QUERY_INFORMATION [ par vecchio56 ] Bonjour Je cherche à ajouter le droit PROCESS_QUERY_INFORMATION à une HANDLE de process pour pouvoir ensuite utiliser GetProcessId. La seule chose don Gestion des messages windows pour des fenêtres - pointeurs de fonctions [ par neodelphi ] Bonjour tout le monde Je suis en train de faire un programme qui utilise directX et qui doit créer une fenêtre windows. J'ai suivi les exemples que ODBC : ERROR : LNK 2019 [ par forfait3 ] Bonjour,je développe une application qui doit se connecter à une base de données sous SQL Server 2000 SP3.Le développement se fait en C++ sous Visual Fenêtres pop up [ par Pingouin57 ] Salut tout le monde, Enfait je voulais savoir comment on peut faire une petite fenêtre qui s'ouvre dans un coin devant toutes les autres, pour affic


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 0,562 sec (3)

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