cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009
-
11 oct. 2007 à 14:19
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009
-
11 oct. 2007 à 20:53
Salut tous le monde,
Je suis en train de me prendre la tête sur le WebBrowser ...
J'aimerais prendre pocéssion des cliques souris : gauche, milieu et droit.
Le gauche, simplement pour lancer un event, le droit et le milieu pour leurs personnaliser le traitement.
Test 1 : Surcharge de WnProc : Pas d'événements souris
Test 2 : Interface (je sais plus le nom) pour intercépter les messages, à la WnProc : Idem, pas dévénements souris
Test 3 : Je me sers des événements Document (que je place après le DocumentComplete) et qui possède un Click... infos souris vides et pas beaucoup de libertés
Résolution... Hook, voila donc :
protected static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
User32.MOUSEHOOKSTRUCT mouseParams = (User32.MOUSEHOOKSTRUCT)
Marshal.PtrToStructure(lParam, typeof(User32.MOUSEHOOKSTRUCT));
Control activeControl = Control.FromChildHandle(mouseParams.hwnd);
User32.MouseEvent intParam = (User32.MouseEvent)wParam.ToInt32();
if (nCode > 0 && intParam != User32.MouseEvent.WM_MOUSEMOUVE && activeControl != null &&
activeControl.GetType() == typeof(AdvancedWebBrowser))
{
if (intParam == User32.MouseEvent.WM_MBUTTONUP)
{
((AdvancedWebBrowser)activeControl).MouseHookEvent(mouseParams, MouseHookButton.Middle);
return 1;
}
if (intParam == User32.MouseEvent.WM_RBUTTONUP)
{
((AdvancedWebBrowser)activeControl).MouseHookEvent(mouseParams, MouseHookButton.Right);
return 1;
}
}
returnUser32.CallNextHookEx(_currentHook, nCode, wParam, lParam);
}
Ici, je traite le bouton droit et le bouton du milieu.
Mon problème est le suivant :
Quand je souhaite utiliser ma méthode pour le bouton gauche(pour lancer un event), je ne retourne pas 1 pour ne pas intérrompre le cycle.... mais problème, ca plante : L'application fige, la souris aussi, pas d'erreur et le clique souris n'est jamais pris en compte (pour défiger, il me suffit de lui faire perdre le focus).
J'ai essayé en Asynchrone, ca ne marche pas mieux.
Soit je fais n'importe quoi, soit y a juste un ptit truc à changer...
Je préférais quand meme passer par autre chose que le hook pour résoudre mon pb.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 11 oct. 2007 à 19:20
Apparemment c'est l'évènement DocumentCompleted qui est appelé 2 fois, faut mettre un booléen pour ne pas enregistrer le MouseDown 2 fois, ou comprendre d'ou vient cet effet de bord.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 11 oct. 2007 à 19:30
Après quelques tests.. en fait l'évènement est appelé à chaque chargement d'une nouvelle page, jusque là ok. mais le HtmlDocument est toujours le même donc ça accumule les gestionnaires d'évènements.