![]()
HANDLES DE FENÊTRES ET DE CONTEXTE
D'AFFICHAGE
Introduction
Handle de Fenêtre hWnd
Handle de Contexte D'Affichage
Informations sur les fonctions
Conclusion
Téléchargement
Les API - Application Programming Interface - vous ouvrent l'accès aux nombreuses fonctions de Windows afin de le contrôler.
Puisque Windows est presque totalement orienté Fenêtres, la majeure partie de ces API sont liées à la manipulation de fenêtres... c'est pourquoi lorsqu'une fenêtre est chargée en mémoire, Windows se charge d'associer à cette fenêtre un Handle de Fenêtre (un identifiant unique de fenêtre permettant à Windows de distinguer les différentes fenêtres en mémoire). Ce Handle de Fenêtre (hWnd, Handle of Window) est ensuite utilisé par Windows et par les autres Applications pour envoyer des messages à la fenêtre.
Il va de même pour le Handle d'un Contexte d'Affichage (hDC, Handle of Device Context) qui est l'identifiant unique d'un contexte d'affichage . Ce contexte d'affichage peut être une image (ex. contrôle Picture) ou même une fenêtre (la partie Client d'une fenêtre).
Comme nous l'avons dit plus haut, Windows attribue (arbitrairement ?) un Handle à une fenêtre lors de son chargement et se sert de ce Handle pour envoyer des messages à la fenêtre. Vous comprenez donc très rapidement que ce Handle est un nombre quelconque et non pas le nom de votre fenêtre ni le titre de celle-ci !!
Je vous ferai aussi remarquer que puisque Windows est
orienté Fenêtre, tout ce que vous voyez devant votre écran sont en fait des fenêtres.
La barre des tâches, le bureau, l'écran lui-même, les zones de texte (textbox),
les boutons... sont des fenêtres pour Windows. Tous possèdent une propriété hWnd.
Obtenir le Handle d'une Fenêtre
Il existe des API et des fonctions Visual Basic vous permettant d'obtenir le handle d'une fenêtre, pour ensuite l'utiliser comme paramètre dans une fonction API afin d'envoyer à ce-dernier des messages.
Nom de Classe de quelques fenêtres Windows
Comme on l'a dit plus haut, la barre de tâches, le bureau, l'écran... sont des fenêtres Windows. Ainsi on peut obtenir leur handle et les manipuler à "notre guise" :^).... Attention! Comme vous le savez avec la vague de virus sortis dernièrement, Windows est très fragile !! Une erreur dans la manipulation de ces fenêtres peut être fatale. Ce qui enchante vraiment beaucoup les hackers d'entre vous qui me lisez (je sais qu'il y'en a) :^)
Certaines fonctions telles que FindWindow
et beaucoup d'autres peuvent prendre comme paramètres le Nom de la Classe
ou le Titre de la fenêtre pour renvoyer le handle de celle-ci. Voici donc quelques
classes de fenêtres Windows:
Barre des Tâches
Classe: "Shell_TrayWnd"
Nom/Titre: "" (aucun)
Bureau
Classe: "Progman" Nom:
"Program Manager"
Explorateur Window
Classe: "ExploreWClass"
Titre: (ça dépend)
Gestion d'energie (ATTN!!)
Classe: "SystemTray_Main"
Titre: "Jauge d'énergie" (pour la version française)
Ecran Entier
Classe: "#32769" Nom:
""
Comme nous l'avons dit plus haut, Un Contexte
d'affichage (Device Context) est la partie graphique (dessin) d'une fenêtre (retenez que
les fenêtres peuvent être des contrôles). Ainsi le contrôle Picture, est un contexte
d'affichage. Les fenêtres aussi possèdent un contexte d'affichage, la partie de la
fenêtre où vous mettez les contrôles (la partie des menus et de barre de titre n'est
pas comprise).
Vous remarquez donc que les Handles des Contextes d'Affichage sont étroitement
liés au Handles de Fenêtre (au fait, toutes fenêtre qui possède un hWnd possède aussi
un hDC).
Il existe des API et des fonctions Visual Basic vous permettant d'obtenir le handle du contexte d'affichage (hDC) d'une fenêtre, pour ensuite l'utiliser comme paramètre dans une fonction API afin d'envoyer à ce-dernier des messages.
Vous pouvez obtenir les déclarations des fonctions spécifiées plus haut en utilisant la Visionneuse d'API ("Complément/Gestionnaire de Compléments").
La fonction GetWindow
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Renvoie le handle de la fenêtre trouvée. hwnd désigne "généralement" le handle de votre fenêtre. wCmd peut prendre une de ces contantes:
Private Const GW_HWNDFIRST = 0 ' Première
fenêtre
Private Const GW_HWNDLAST = 1 ' Dernière fenêtre
Private Const GW_HWNDNEXT = 2 ' Fenêtre suivante (après celle du hWnd spécifié)
Private Const GW_HWNDPREV = 3 ' Fenêtre précédente
Private Const GW_CHILD = 5 ' Fenêtre fille du hWnd
La fonction FindWindow
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Renvoie le handle de la fenêtre trouvée. lpClassName désigne le nom de la classe de la fenêtre. lpWindowName désigne le nom (souvent titre) de la fenêtre.
La fonction GetForegroundWindow
Private Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Long
Renvoie le handle de la fenêtre active (qui est au premier plan).
La fonction WindowFromPoint
Private Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Renvoie la fenêtre qui contient le point (x,y). Ce point est souvent le pointeur de la souris.
La fonction GetDC
Private Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long
Renvoie le hDC du handle de fenêtre spécifié.
Nous venons de voir comment obtenir le handle (et le hDC) de n'importe quelle fenêtre chargée en mémoire sur le système.
Une fois que vous avez ce handle, vous devenez maître de la
situation ! Vous pouvez presque tout faire à ces fenêtres; les fermer, dessiner dessus,
les mettre au premier plan, prendre leur menu....
Cependant, pour executer encore toutes ces opérations il faut une bonne
connaissance des API qui permettent de le faire.
Présentement, vous savez seulement comment avoir le handle
d'une fenêtre, mais vous ne savez pas encore comment manipuler ce handle avec d'autres
fonctions :-(.
Pour ne pas vous vexer, je vous ai préparé un bon code
source qui vous permet de changer le bouton Démarrer par un autre
bouton que vous avez personnalisé.
J'ai aussi préparé un programme (avec ses sources bien sûr) qui vous permettra
de lister tous les handles, les classes, et les titres des fenêtres qui sont chargées en
mémoire sur le système. Il ne vous restera plus qu'à les examiner de très près.
Pour vous accompagner dans la lecture, voici l'ensemble des programmes et listings présentés dans cet article.
StartButton.zip - Téléchargez le zip qui contient le programme qui changer le bouton Démarrer.
Handle.zip - Téléchargez le zip qui contient le programme qui liste toutes les fenêtres en cours.
[Home]
[Actualités]
[Trucs
& Astuces]
[Astuces Windows]
[ActiveX-Ocx/Dll]
[Articles]
[Codes Sources]
[VB
Games]
[Fichiers Sons]
[Fichiers Icônes]
[Programmes & Sources]
[Mailing-List]
[Divers]
[A Propos]