[R] Intercepter et modifier clic droit

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

[R] Intercepter et modifier clic droit

#1

Message 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
Modifié en dernier par Iste le jeu. 30 juil. 2009 12:17, modifié 1 fois.
Signez ici
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Intercepter et modifier clic droit

#2

Message 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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Intercepter et modifier clic droit

#3

Message 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
Signez ici
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Intercepter et modifier clic droit

#4

Message 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
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Intercepter et modifier clic droit

#5

Message 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
Signez ici
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Intercepter et modifier clic droit

#6

Message 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 ^^'
Signez ici
Répondre