Fenetre

mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023 - 29 sept. 2009 à 19:14
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 5 oct. 2009 à 10:44
Bonjour

j'ai essayé ces 2 programmes :
http://www.cppfrance.com/codes/SPY_30900.aspx
http://www.cppfrance.com/codes/WINDOW-CONTROL_11274.aspx

et j'ai remarqué que pour certaines applications ( Firefox, Microsoft Office , VLC, ...) certains contrôles fils n'étaient pas détectés / retournés

comment ça se fait ?
il y a possibilité de "protéger" ses fenêtres ?

ou on peut créer des contrôles d'une autre façon qu'avec CreateWindow et avec les ressources et qui ne soit pas "détectable"


Merci

4 réponses

s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 3
30 sept. 2009 à 21:18
En fait, avec les API de Windows, tu peux créer tes propres contrôles (graphique j'entends). Tu peux même leur donner un nom. Du coup quand tu crée un contrôle sur ta fenêtre, ton utilises createWindow mais au lieu de lui spécifier BUTTON,LISTBOX,... comme type tu lui donne le nom de ton contrôle.

Donc, lorsque spy++ ou tout autre programme du même type "scanne" les contrôles d'une fenêtre, il trouve des contrôles de type connus (BUTTON,GROUPBOX,...), il vérifie les contrôles fils. Mais pas sur les objets non standards (objets GTK pour FF, C# certainement pour office, Qt pour VLC,...).

Il me semble même que en faisant du subclassing, tu peux en interceptant le bon message, modifier le retour des contrôles fils et renvoyer une liste bidon ou cacher certains composants.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
3 oct. 2009 à 17:36
Salut,

_Jonathan -> Attention, spy++ et autres détectent très bien les contrôles utilisant des classes perso (RegisterClassEx). Ils ne se limitent pas du tout aux classes de base (Boutons et autres).

C'est surtout que c'est des "composants" qui ne sont pas des fenêtres au sens Windows du terme (Pas créés avec CreateWindowEx). Dans ces cas là, les logiciel dessinent leurs composants à la main. Windows n'a pas du tout conscience de ces composant, il ne connait que la fenêtre qui les contient.
0
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
5 oct. 2009 à 10:33
quel est l'intérêt de "recréer" des composants existants ?

car la plupart du temps, ce sont des boutons, static, edit, liste, ...

surtout qu'il faut gérer les évènements (clic, clavier, ...)
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 oct. 2009 à 10:44
Cela permet un meilleur contrôle sur les composants de la part de la librairie graphique.

Par exemple, en java, on peut relativement facilement mettre des combobox comme colonne d'une listview. Permettre cette possibilité dans une listview windows aurait été plus complexe.

Et ça peut aider au niveau de la mise en place d'une gestion de thèmes d'interface perso, du redimensionnement dynamique...

Cela permet aussi de factoriser du code : on va utiliser le même code pour un composant qu'il soit sous linux ou windows : seule la partie dessin sera du code spécifique à une plateforme.

Mais les gains sont effectivement limités... Les composants personnalisés sont rarement intuitifs et déroutent souvent l'utilisateur très habitué avec les composants classiques windows.
0
Rejoignez-nous