Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Hook : Erreur sur traitement partiel [ Windows / API ] (Yxion)

jeudi 11 octobre 2007 à 14:19:26 | Hook : Erreur sur traitement partiel

Yxion

Membre Club

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.


I love .net


jeudi 11 octobre 2007 à 17:27:59 | Re : Hook : Erreur sur traitement partiel

Lutinore

Administrateur CodeS-SourceS

Salut, qu'est-ce qui cloche avec le test n° 3 ?




public partial class Form1 : Form
{
    public Form1( )
    {
        InitializeComponent( );

        this.Size = new Size( 640, 480 );

        WebBrowser wb = new WebBrowser( );
        wb.Parent = this;
        wb.Dock = DockStyle.Fill;
        wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler( WebBrowser_DocumentCompleted );
        wb.Url = new Uri( " [ Lien ]" );

    }

    private void WebBrowser_DocumentCompleted( object sender, WebBrowserDocumentCompletedEventArgs args )
    {
        HtmlDocument htmldoc = ( ( WebBrowser )sender ).Document;
        htmldoc.MouseDown += new HtmlElementEventHandler( HtmlDoc_MouseDown );
    }

    private void HtmlDoc_MouseDown( object sender, HtmlElementEventArgs args )
    {
        MessageBox.Show( args.MousePosition + "\r\n" + args.MouseButtonsPressed );
    }
}


jeudi 11 octobre 2007 à 17:31:40 | Re : Hook : Erreur sur traitement partiel

Yxion

Membre Club
Ok... j'ai testé que sur le click, que ne transmet le bouton...


I love .net

jeudi 11 octobre 2007 à 17:48:41 | Re : Hook : Erreur sur traitement partiel

Yxion

Membre Club
ce qui cloche un peu, c'est que l'évenement est déclenché 2 fois par simples clicks


I love .net

jeudi 11 octobre 2007 à 19:20:02 | Re : Hook : Erreur sur traitement partiel

Lutinore

Administrateur CodeS-SourceS
Réponse acceptée !
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.

jeudi 11 octobre 2007 à 19:30:46 | Re : Hook : Erreur sur traitement partiel

Lutinore

Administrateur CodeS-SourceS
Réponse acceptée !
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.

jeudi 11 octobre 2007 à 20:53:46 | Re : Hook : Erreur sur traitement partiel

Yxion

Membre Club
pfff... là, j'assure vraiment pas...


I love .net



Cette discussion est classé dans : souris, hook, mouseevent, user32, activecontrol


Répondre à ce message

Sujets en rapport avec ce message

Récuperer evenement click Souris - Hook [ par boutnell ] Bonjour,Je voudrais pouvoir connaitre, a chaque instant et sur chaque programme qui tourne, si l'utilisateur click sur sa souris.Par exemple, afficher Hook souris [ par Ond9 ] Bonjours à tous.Je cherche à recupèrer le click gauche de ma souris n'importe ou sur l'écrant et dans n'importe quel application,d'après ce que j'ai c réaction de la muminosité de l'image seln la position de la souris... [ par jules1984 ] bonjour, je cherche à pouvoir changer sur flash cs3, la luminosité d'une image selon la position de ma souris en action script 3. je voudrais que l'im fenetre qui apparait quant la souris passe dessus et disparait quant la sourit la quitte [ par rgomri ] je veux faire une fenetre qui apparait quant la souris passe dessus et qui disparait quant la souris n'est pas dessus (genre barre de tache ) j'ai fa hook et C# ???? [ par anthonycosson ] bonjourcomment peut-on utiliser des hooks en C#? merci...et au pire si quelqu'un aurait une autre solution que les hooks pour simuler j'appui d'une to Capturer les mouvements de la souris sur un contrôle ActiveX [ par ilwika ] Bonjour!! J'explique mon problème : Je dois capturer les événements de la souris sur un contrôle ActiveX. Je comptais utiliser les méthodes Mousexxx drag and drop et souris [ par psykostik ] Bonjour, je programme actuellement un morpion et j'ai un leger problème : j'utilise les drag and drop pour déplacer les pions qui sont des images bmp Savoir si la souris bouge.... [ par thorgal1612 ] Bonjour,Comment faire pour savoir si la souris bouge et récupérer sa positionMerci tester si le boutton gauche de la souris enfoncé [ par jul00 ] tous est dans le sujet ou tester si une boutton est enfoncer dans une codition if si y quelle qu'un qui sait faire sa merci Position absolue de la souris avec DirectX 9 [ par oualla_mohamed ] Salut à tous,Je suis entrain de m'initier à la programmation directx. Lorsque je capture la position souris : a) j'ai le sens du déplacement (mMouse.P


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Appels d'offres

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.