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 Gestion de la souris avec QuartzTypeLib [ par DedeSurf ] Bonjour, J'utilise QuartzTypeLib sur un projet que je fais, il fonctionne très bien, mais j'aimerais géré les événement de la souris comme le déplacem Désactiver clavier [ par onde2chockgbkgb ] Bonjour à tous. Avant toute chose, je voudrais au préalable m'excuser de poster ici car je ne pense pas que ma demmande soit orienté dans le sens de clavier et souris sans fil [ par ecr ] ecrBonsoir,Je viens d'acquérir un clavier et une souris sans fil Logitech Deluxe 660 Cordless Desktop, mais je n'ai aucun voyant qui m'indique si Verr qu'est ce que vous entendez par HOOK? [ par reussir31 ] Bonjour à tous, tout est dans le titre : qu'es ce que vous endentendez par HOOK? Merci d'avance. déplacemont d'un Graphics avec la souris [ par PrinceOfAlgeria ] salut , Comment peut on déplacer un Graphics avec la souris en c# ???j'ai pas trouvé comment modifier les coordonnés d'un graphics pour l'utiliser dan programmer souris [ par soniafeki ] Salu , je travaille avec c# et precisamment avec les graphe.Je veux programmer le bouton droite de la souris pour pouvoir effectuer des modifications


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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,343 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é.