Page 1 sur 1

[R] Intercepter et modifier clic droit

Posté : mer. 29 juil. 2009 22:10
par Iste
Salutations,

Je cherche a modifier le menu contextuel clic droit d'une apli pour y ajouter des fonctions.
Pour cela, j'ai commencé par chercher a savoir comment capturer le clic, j'ai réussi grace à
► Afficher le texte_WinAPI_SetWindowsHookEx
Maintenant je cherche a vérifier si le curseur se trouve bien sur la bonne fenêtre, mais ce cous ci, j'ai beau avoir retourné la doc, j'ai toujours rien trouvé :/ GUIGetCursorInfo() reste muet.
Par la suite, et surement plus compliqué, je cherche a 'stopper' le clic envoyé a l'appli, histoire de pas avoir deux menus l'un dessus l'autre...

Voila, si vous avez des idées, des solutions...
Merci

Re: [..] Intercepter et modifier clic droit

Posté : mer. 29 juil. 2009 23:37
par orax
Bonsoir, il y cette UDF MouseSetOnEvent_UDF qui devrait faire ce que vous demandez.

Code : Tout sélectionner

#include <MouseSetOnEvent_UDF.au3>

_MouseSetOnEvent($MOUSE_SECONDARYDOWN_EVENT, "Fonction_pour_remplacer_le_clic", "", "", $handle_fenetre)

While 1
    Sleep(10)
WEnd

Func Fonction_pour_remplacer_le_clic()
    ConsoleWrite("*")
    Return 0
EndFunc
J'ai testé ça sur le notepad et ça semble marcher. Le seul problème est que ça pose un hook global, et je trouve que ça fait un peu ramer l'ordi... Pour faire un hook sur un seul processus, il est probable qu'il faille utiliser une DLL : http://www.autoitscript.com/forum/index ... t&p=540999.

Re: [..] Intercepter et modifier clic droit

Posté : jeu. 30 juil. 2009 00:39
par Iste
Déja, merci beaucoup pour cet UDF, il m'apporte au moins la solution pour intercepter le clic.
Mais a part ca, j'ai plusieurs problemes ;
Si la fenêtre cible n'est pas active, la fonction ne se lance pas :/ (faut clic deux fois)
Ensuite, la fonction _IsHoveredWnd() et des plus.. archaïque. Du coup elle ne permet pas d'appliquer la fonction sur une sous GUI :\

Je vais donc analyser tout ca et essayer d'en tirer le meilleur

Re: [..] Intercepter et modifier clic droit

Posté : jeu. 30 juil. 2009 08:23
par SagePourpre
Ce n'est pas exactement ce que tu veux mais si ça t'inspire...


J'ai associé le clic droit de la fenêtre de SciTE
à un "second menu contextuel" qui s'ouvre à la gauche du premier.

► Afficher le texte

À ce moment, le menu contextuel principal reste inchangé... Seulement, un deuxième menu apparaît automatiquement à la gauche du premier

Re: [..] Intercepter et modifier clic droit

Posté : jeu. 30 juil. 2009 11:00
par Iste
Merci beaucoup pour l'exemple ^^
Mais bon, comme tu t'en doute, c'est pas trop ce que je recherche

J'ai trouvé la fonction win() quil me faut

Code : Tout sélectionner

Func win()
    Local $tPoint = DllStructCreate("int X;int Y")
    DllStructSetData($tPoint, "X", MouseGetPos(0))
    DllStructSetData($tPoint, "Y", MouseGetPos(1))
    Return _WinAPI_WindowFromPoint($tPoint)
EndFunc
Avec le code que j'ai posté dans mon 1er message, c'est exactement ce que je cherche, me reste juste a trouver ce qui, dans l'udf donné par orax, empeche le clic de réellement s'effectuer.
Apres j'essayerai de comprendre comment mettre un hook spécifique pour déco des recouses

Encore merci de votre aide, je continue de chercher dans mon coin

Edit : Apres des teste avancés, la fonction win() ci dessus est toujours bien moins réactive que AU3Info (nombreux bug quand plusieurs fenêtres superposées)

Edit2 : je confirme
Avec l'udf d'orax, tout fonctionne, sauf la fonction de récup du handle de la fenêtre sous le curseur. Je l'ai modifier ainsi
► Afficher le texte
Il ne me faut donc maintenant, que trouver comment récup l'handle de la fenêtre sous le curseur, aussi bien que le fait AU3Info

Re: [..] Intercepter et modifier clic droit

Posté : jeu. 30 juil. 2009 12:17
par Iste
Problème résolu
Le bug venais de MouseGetPos() car j'etai en Opt("MouseCoordMode",0).
Merci pour votre aide, je vais pour le moment me contenter de ca, meme si c'est super pas propre ^^'