Detecter l'evenement d'un bouton appuyé dans une fenetre d'un logiciel

cs_danyo Messages postés 11 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 21 mars 2005 - 20 mars 2005 à 12:04
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 22 mars 2005 à 12:33
Salut,

Comment puis-je détecter l'événement qu'un bouton d'une fenêtre d'un logiciel a été appuyé?
Par exemple, dans Word, quand je veux sauvegarder mon document j'appuie sur 'SaveAs'
et ca ouvre un SaveFileDialog avec les boutons 'Save' et 'Cancel'.
Dans mon programme j'ouvre Word, je parcours les fenêtres pour obtenir le contenu du combo box/edit box. Ensuite, j'aimerais savoir sur quel bouton a appuyé l'utilisateur (Save ou Cancel)?
Aussi, ou puis-je trouver la liste des API avec la description de leurs fonctionnalités?

Merci

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 mars 2005 à 13:21
Un des moyens et de redéfinir les événements souris (avec la
fonction de l'API SetCapture), mais cela n'est pas forcément très
pratique à utiliser.



Il vaudrait mieux faire un hook système, mais là, comme le dirait brunews, il vaux mieux passer au C !



Pour la liste des API, va télécharger mon viewer d'api : plus de 500
fonctions documentés en français pour plusieurs langages. (voir le lien
de ma signature)

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
cs_danyo Messages postés 11 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 21 mars 2005
20 mars 2005 à 14:13
Salut DarK Sidious,

Merci pour ton API viewer, il est extraordinaire!!!

Je ne sais pas qu'est ce qu'un Hook System. Peux-tu m'indiquer ou est ce qu'on peut trouver une explication exhaustive avec un exemple, ou bien me l'expliquer en quelques lignes.

J'ai jeté un coup d'oeil sur la fonction SetCapture dans ton API viewer et je ne vois pas trop comment capter l'evenement du bouton appuyé.

Encore une fois merci.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 mars 2005 à 14:33
Un hook systeme consiste à intercepter tout les messages windows avant
qu'ils ne soient dispatché sur les fenêtres. Ce n'est pas facile à
gérer, et surtout, en VB, c'est du suicide (VB adore les hooks... lol)



Pour SetCapture, il suffit de lui spécifier le handle d'une fenêtre, et
alors tout les événements souris seront envoyés à cette fenêtre (par
exemple, un bouton).

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : http://www.ProgOtoP.com/popapi/
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 mars 2005 à 15:07
Comme dit par DARKSIDIOUS, un hook est une interception. Il peut être local à ton prog ou alors global au système.

Cas du hook system: il sera placé dans une chaine d'interceptions, le dernier créé est placé au début et a donc la main pour savoir s'il veut ou non retransmettre ce qu'il intercepte. Pour être créé avec réussite par Windows, le code du hook devra se trouver dans une dll afin que le système mappe une copie de cette dll dans chaque espace mémoire de tous les processus (en mode user, non kernel) actuellement chargés. Si l'initialisation du code DLL_PROCESS_ATTACH de DllMain aboutit, alors le hook est lancé. Le code du hook proprement dit doit se trouver dans une fonction exportée de la dll, c'est son adresse que l'on donne à SetWindowsHookEx. Tout ceci implique par force que cette dll soit en code natif (directement exécutable par le processeur) et exclut donc les langages interprétés de la prog system, il serait inconcevable de mapper des virtual machine dans chaque processus. En résumé et comme dit plus haut, il faudra passer par le C (ou ASM).

ciao...
BruNews, MVP VC++
0

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

Posez votre question
cs_danyo Messages postés 11 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 21 mars 2005
21 mars 2005 à 14:39
merci pour tous ces informations!

A DarkSidious, Je n'ai toujours pas saisi ce qu'il faut faire avec SetCapture. Mon but est de savoir si l'utilisateur a appuyé sur Save ou sur Cancel

A BruNews, peux-tu m'orienter comment utiliser les hook pour atteindre mon objectif.

Merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 mars 2005 à 12:33
Lire l'indispensable Richter:
http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip

Voici aussi quelques-uns de mes exemples sur CS:
HOOK SYSTEM SUR WM_MOUSEWHEEL (WIN32)
http://www.cppfrance.com/code.aspx?ID=25998
DLL HOOK EN RESSOURCE BINAIRE DU PROG (WIN32)
http://www.cppfrance.com/code.aspx?id=25450
HOOK F11 SUR IE (WIN32)
http://www.cppfrance.com/code.aspx?id=18202*
HOOK CLAVIER
http://www.cppfrance.com/code.aspx?id=17818
LIMITE LE NBR DE FENETRES IE V2 (WIN32)
http://www.cppfrance.com/code.aspx?id=17387
LIMITE LE NBR DE FENETRES INTERNET EXPLORER (WIN32)
http://www.cppfrance.com/code.aspx?id=11059
NO TASK MANAGER (WIN32)
http://www.cppfrance.com/code.aspx?id=11186
HOOK DE ENTER SUR DIALOGBOX (WIN32)
http://www.cppfrance.com/code.aspx?id=11007
HOOK SUR FENETRE (WIN32)
http://www.cppfrance.com/code.aspx?id=10997
AJOUTER UN MENU A NOTEPAD (WIN32)
http://www.cppfrance.com/code.aspx?ID=28181

ciao...
BruNews, MVP VC++
0
Rejoignez-nous