begin process at 2012 02 11 14:11:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

API

 > 

Hook : Erreur sur traitement partiel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Hook : Erreur sur traitement partiel

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ée 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 Tablet PC et appuie sur l'écran (nombre et position) par un hook [ par mastereur ] Bonjour à tous, Avant de commencer, je précise que j'ai un Tablet pc. Je cherche à détecter l'appuie de doigts sur l'écran (leur nombre) puis à récu API Hook (printdialog) [ par Buster89 ] Bonjour, Je souhaite remplacer le printdialog par défaut de windows par ma propre form de sorte que lorsque l'on clique sur "imprimer" que ce soit su garder la souris dans la fenêtre [ par warweapon ] Bonjour, je bosse en ce moment avec OpenGl, j'utilise le très bon binding OpenTK pour c#. Je suis entrain de faire une caméra "FreeFly" Mais voilà, Problème de mouseup lors d'un dragdrop dans une listview [ par Hermios ] Salut à tous, Mon problème semble être un problème connu : J'ai une listview, je veux effectuer (eventuellement!) des dragdrop de cette listview (mult 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,306 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales