Hook souris

Résolu
Ond9 Messages postés 10 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 24 octobre 2008 - 21 oct. 2008 à 19:00
Ond9 Messages postés 10 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 24 octobre 2008 - 24 oct. 2008 à 09:03
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 compris sa fonctionne avec un "hook" mais je comprend pas trop, j'ai besoin d'un exemple genre :

Affiche un message MessageBox "click gauche appuyer !!!" dès que le click gauche a été pressé.

Je sais ya un exemple sur un autre post mais je ne le comprend pas ^^.


merci

10 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 oct. 2008 à 01:26
Salut, il y a aussi des exemples de hook pour la souris sur CSharpFr

>> http://www.csharpfr.com/forum/sujet-EVENEMENT-IMPORTE-SUR-ECRAN_745061.aspx

Et un exemple sans installer de hook :

using System;
using System.Drawing;
using System.Windows.Forms;


// http://www.csharpfr.com/codes/LIBRAIRIE-RAWINPUT-NET_43573.aspx
using Wrapper.Windows.RawInput;


namespace RawHook
{
    internal class MainForm : Form
    {
        private bool draw = false;


        private MainForm( ) : base( )
        {
            this.Text = "Raw Hook";
            this.ClientSize = new Size( 96, 96 );
            this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
            this.StartPosition = FormStartPosition.Manual;
            this.Location = new Point( 0, 0 );
            this.TopMost = true;


            RawDevice.RegisterRawDevices( 0x01, 0x02, InputMode.BackgroundMode ); // Global hook.
            RawDevice.RawInput += new EventHandler< RawInputEventArgs >( RawDevice_RawInput );
        }


        private void RawDevice_RawInput( object sender, RawInputEventArgs args )
        {
            try
            {
                MouseData data = ( MouseData )args.GetRawData( );


                if ( data.ButtonState == MouseButtonState.LeftDown )
                {
                    draw = true;
                    this.Invalidate( this.ClientRectangle );
                    this.Update( );
                }
                if ( data.ButtonState == MouseButtonState.LeftUp )
                {
                    draw = false;
                    this.Invalidate( this.ClientRectangle );
                    this.Update( );
                }
            }
            catch
            {
                // ..
            }
        }


        protected override void OnPaint( PaintEventArgs args )
        {
            //base.OnPaint( args );


            Graphics g = args.Graphics;


            if ( draw )
                g.Clear( Color.Red );
            else
                g.Clear( this.BackColor );
        }


        protected override void Dispose( bool disposing )
        {
            RawDevice.UnregisterRawDevices( 0x01, 0x02 );
            base.Dispose( disposing );
        }


        [ STAThread ]
        private static void Main( )
        {
            Application.EnableVisualStyles( );
            Application.Run( new MainForm( ) );
        }
    }
}
3
Ond9 Messages postés 10 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 24 octobre 2008
21 oct. 2008 à 19:07
Zut, j'ai oublier un détail, J'aimerai que ce messagebox s'affiche si le click gauche est garder enfoncer ! si il est relaché le message disparaît.
0
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
21 oct. 2008 à 21:13
0
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
21 oct. 2008 à 21:16
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 oct. 2008 à 11:10
xmox667> sur chaque poste tu mets toujours entre 2 et 4 messages ne possédant qu'un lien (poster à quelques minutes d'intervalles), possible de tous les regrouper dans un seul message?
Merci d'avance....

<hr />
-My Blog-
0
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
22 oct. 2008 à 11:59
Salut Bidou,
Oui je vais les regrouper.
A+
0
Ond9 Messages postés 10 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 24 octobre 2008
22 oct. 2008 à 22:26
merci c'est parfait, me reste plus qu'a trouver comment simuler un click gauche de la souris maintenant.
0
Ond9 Messages postés 10 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 24 octobre 2008
23 oct. 2008 à 12:39
Lutinnoire j'ai un problème, j'ai remplacer ton rectange qui s'affiche en rouge par une simulation de click gauche quand le boutton gauche de la souris est "DOWN".

Alors sur windows il n'y a pas de soucis sa fonctionne mais dès que je lance un jeux genre battlefield 2 sa ne marche plus ^^ il ne click plus -.- et je ne suis même pas sur qu'il détect "data.ButtonState == MouseButtonState.LeftDown " .

Ma question est pourquoi ?

c'est parce qu'il ny a pas de hook ?

Bon but étant de faire un application pour éviter de cliquer comme un singler sur le bouton gauche de ma souris pour tirer en rafale dans le jeux, mais n'avoir besoin que de le laisser appuyer le boutton gauche  pour qu'il fasse les click tout seul ^^

merci.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
23 oct. 2008 à 15:14
Il est possible que pour un jeu ce soit différent, car les jeux utilisent souvent DirectInput. Peut être que le jeu capture la souris en mode "exclusif" et supprime les messages ( WM_* ) LeftDown, LeftUp etc..

Dans un premier temps laisse le carré rouge pour voir si l'appli détecte quelque chose, test aussi la valeur de data.RawButtonState à la place de LeftDown.

Sinon, ce genre de hook  >ICI< est relativement simple à mettre en place et ça semble marcher avec un jeu DirectX >ICI<
0
Ond9 Messages postés 10 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 24 octobre 2008
24 oct. 2008 à 09:03
J'ai repris ton code et ajouter sa  :

if ( data.ButtonState == MouseButtonState.LeftDown )
                {
                    Souris MonClick = new Souris();
                    draw = true;
                    this.Invalidate( this.ClientRectangle );
                    this.Update( );
                    MonClik.clique();
                }

///
///voici la classe Souris:
///



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;




namespace WindowsFormsApplication1
{
    public class Souris
    {
        [DllImport("User32.dll", SetLastError = true)]
        private static extern int SendInput(int nInputs, ref INPUT pInputs, int cbSize);




        public const int MOUSEEVENTF_LEFTDOWN = 0x0002;
        public const int MOUSEEVENTF_LEFTUP = 0x0004;       




        public struct INPUT
        {
            public int type;
            public MOUSEINPUT mi;
        }




        public struct MOUSEINPUT
        {
            public int dx;
            public int dy;
            public int mouseData;
            public int dwFlags;
            public int time;
            public int dwExtraInfo;
        }




        public void clique()
        {
            INPUT aInput = new Souris.INPUT();
            aInput.type = 0;
            aInput.mi.dwFlags = Souris.MOUSEEVENTF_LEFTDOWN;
            aInput.mi.dwExtraInfo = 0;
            aInput.mi.mouseData = 0;
            aInput.mi.time = 0;
            Souris.SendInput(1, ref aInput, Marshal.SizeOf(aInput));
            aInput.mi.dwFlags = Souris.MOUSEEVENTF_LEFTUP;
            Souris.SendInput(1, ref aInput, Marshal.SizeOf(aInput));
        }
    }
}

Sa ne marche pas comme je le souhaiterai si qqun a une idée ??
Sachant que le but et de simuler des cliques si la touche gauche de la souris est enfoncé et d'arreter les cliques dès quelle est relachée.
 
0
Rejoignez-nous