begin process at 2010 02 10 08:39:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Formulaire / Winforms / Controls

 > 

Evénement n'importe ou sur l'écran


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

Evénement n'importe ou sur l'écran

mercredi 24 mai 2006 à 09:50:59 | Evénement n'importe ou sur l'écran

hibouman

Je débute en c# et j'aurais aimé quelque chose dans ce genre là:

quelque_soit_l'endroit_sur_l'écran.Click += new EventHandler(écran_Click);
...
static void  écran_Click(object sender, EventArgs e)
{
   MessageBox.Show("click sur l'écran !!");
}

Bref, qu'un message soit affiché quelque soit l'endroit ou l'on click sans même ne faire apparaitre une Form.

Merci !




mercredi 24 mai 2006 à 10:15:37 | Re : Evénement n'importe ou sur l'écran

Killan

N'y a t il pas une API windows qui permet de connaître l'état de la souris et de s'accrocher dessus avec des événements ? Du moins je chercherais là dedans.

Bien à toi,

Killan
www.daaboo.net
mercredi 24 mai 2006 à 13:15:53 | Re : Evénement n'importe ou sur l'écran

hibouman

Merci.
Ca me parait bizarre quand même pour un langage aussi récent et puissant qu'on ne puisse pas se contenter de quelques lignes de codes et donc être obligé de passer par les API.
Mais bon, peut-être...
mercredi 24 mai 2006 à 18:41:35 | Re : Evénement n'importe ou sur l'écran

Lutinore

Administrateur CodeS-SourceS
Salut, oui c'est même plus "lourd"que ça, faut carrément installer un hook, non pas que ce soit compliqué mais ça demande de connaître P/Invoke et surtout un hook mal écrit peut ralentir le système.

Regardes les fonctions Win32 :

SetWindowsHookEx
UnhookWindowsHookEx
CallNextHookEx

Si ton application, est une application multimedia, utilise DirectInput en mode background.

Si tu as besoin des coordonnées d'écran de la souris de manière très ponctuelle tu peux utiliser la méthode "très moche" du timer, il s'agit de tester la propriété Cursor.Postion dans un timer :(

Autre méthode assez élégante mais pas très connue c'est l'API RawInput, j'avais fait un wrapper managé mais je l'ai jamais terminé.. Je vais voir si je peux poster un snippet sur Codyx avant ce week-end.

mercredi 24 mai 2006 à 23:35:46 | Re : Evénement n'importe ou sur l'écran

hibouman

Merci bien , je v tester tout ça !!
jeudi 25 mai 2006 à 00:12:57 | Re : Evénement n'importe ou sur l'écran

hibouman

Je me suis dit qu'en plaçant un thread ça pourrait marcher:
Voilà ce que ça donne:

using System;
using System.Windows.Forms;
using System.Threading;

public class essai
{
  public static void Main()
  {
    Thread Thread1;
    Thread1 = new Thread(new ThreadStart(ThreadLoop));
    Thread1.Start();
  }
  public static void ThreadLoop()
  {
    while (Thread.CurrentThread.IsAlive)
    {
      MouseButtons mbs = Control.MouseButtons;
      if ((mbs & MouseButtons.Left) != 0)
    {
      MessageBox.Show("click");
    }
  }
 }
}

Maintenant quelques soit l'endroit ou l'on click, l'ordi le signalera par un messagebox.
Bon c ptetre pas encore tres propre mais au moins je suis sur une piste !
vendredi 26 mai 2006 à 03:36:29 | Re : Evénement n'importe ou sur l'écran

Lutinore

Administrateur CodeS-SourceS

Comme la question revient souvent, j'ai fait un exemple de hook pour la souris.




using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Security;

public partial class MainForm : Form
{
    #region Win32

    [ StructLayout( LayoutKind.Sequential ) ]
    private struct MSLLHOOKSTRUCT
    {
        public int X;
        public int Y;
        public int Data;
        public int Flags;
        public int Time;
        public UIntPtr Extra;
    }

    [ DllImport( "user32.dll", SetLastError = true ), SuppressUnmanagedCodeSecurity ]
    private static extern IntPtr SetWindowsHookEx( int hook, HookProc callback, IntPtr module, uint threadID );

    [ DllImport( "user32.dll", SetLastError = true ), SuppressUnmanagedCodeSecurity ]
    private static extern bool UnhookWindowsHookEx( IntPtr hHook );

    [ DllImport( "user32.dll" ), SuppressUnmanagedCodeSecurity ]
    private static extern IntPtr CallNextHookEx( IntPtr hHook, int code, UIntPtr wParam, IntPtr lParam );

    private delegate IntPtr HookProc( int code, UIntPtr wParam, IntPtr lParam );
   
    private const int WH_MOUSE_LL = 14;
    private const int HC_ACTION = 0;

    #endregion Win32

    private IntPtr hHook = IntPtr.Zero;
    private HookProc hookProc = null;

    public MainForm( )
    {
        InitializeComponent( );
    }

    protected override void OnLoad( EventArgs e )
    {
        base.OnLoad( e );

        hookProc = new HookProc( LowLevelMouseProc );
        hHook = SetWindowsHookEx( WH_MOUSE_LL, hookProc, Marshal.GetHINSTANCE( this.GetType( ).Module ), 0 );
           
        if ( hHook == IntPtr.Zero ) // Le hook ne s'installe pas en mode DEBUG.
            MessageBox.Show( "Impossible d'installer le hook.", "Erreur" );
    }

    protected override void OnFormClosed( FormClosedEventArgs e )
    {
        base.OnFormClosed( e );

        if ( hHook != IntPtr.Zero )
        {
            if ( !UnhookWindowsHookEx( hHook ) )
                MessageBox.Show( "Impossible de désinstaller le hook.", "Erreur" );

            hHook = IntPtr.Zero;
            hookProc = null;
        }
    }

    // [ Lien ]
    private IntPtr LowLevelMouseProc( int code, UIntPtr wParam, IntPtr lParam )
    {
        if ( code == HC_ACTION )
        {
            unsafe
            {
                MSLLHOOKSTRUCT* p = ( MSLLHOOKSTRUCT* )lParam;
                Point screenPos = new Point( p->X, p->Y );
                Point clientPos = this.PointToClient( screenPos );
                this.Text = screenPos + " - " + clientPos; // Pour l'exemple.
            }
        }
       
        return CallNextHookEx( hHook, code, wParam, lParam );
    }
}

vendredi 26 mai 2006 à 11:08:05 | Re : Evénement n'importe ou sur l'écran

MorpionMx

Membre Club Administrateur CodeS-SourceS
Faut le mettre sur codyx ca lutinore, ca va pouvoir resservir

Mx
MVP C#
 



Cette discussion est classée dans : écran, click, importe, endroit, evénement


Répondre à ce message

Sujets en rapport avec ce message

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 Search driven portals [ par Mabikas ] Bonjour à tous,Je ne suis pas convaincu que je poste au bon endroit, mais en même temps je n'ai pas vraiment trouvé un autre endroit pour poser ma que datagridview +double click [ par sws2007 ] bon soirje débute avec c# .je voudrais savoir comment lorsque je fais double clique sur une cellule d'une data gridview il s'affiche une deuxiemme  fo Fréquence de l'écran [ par DIMUSERS ] Bon sang, je pensais que ça me prendrait 2 secondes, quelqu'un  sait-il comment récupérer la fréquence à laquelle la carte vidéo balaye l'écran, c'est détecter si l'évenement double click et détecter ou non [ par sws2007 ] bonjour ; comment pourrais je tester si l'évènement double clic et déclencher ou non lorsque  je clique sur une cellule de mon datagridviewmerci Simuler un click sur une page web [ par ghell2000 ] Le titre  n'est pas des plus clairs... Je vais essayer de l'être d'avantage.Mon objectif: appeler une page Web (pas de problème), renvoyer un flux  co 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 Attacher un événement à un hyperlink [ par sophie316 ] Bonjour,J'ai un tableau qui contient un identifiant et un libellé en hyperlink et j'aimerais que lorsque l'on clique sur le libellé, en plus de rediri click à répétition [ par facbest ] Bonjour, Est'il possible d'obtenir au click d'un button une répétition de ce click jusqu'à qu'une valeur soit vrais sur une recherche aléatoire de no détecter click "long" bouton [ par bigger ] Bonjour à tous,J'ai deux boutons de chaque côté d'une progressbar continue, l'un pour incrémenter et l'autre pour décrémenter cette derniere (bouton +


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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 : 0,686 sec (3)

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