hibouman
Messages postés13Date d'inscriptiondimanche 1 juin 2003StatutMembreDernière intervention21 juin 2006
-
24 mai 2006 à 09:50
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 2008
-
26 mai 2006 à 11:08
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.
cs_Killan
Messages postés46Date d'inscriptionjeudi 10 janvier 2002StatutMembreDernière intervention 5 février 2010 24 mai 2006 à 10:15
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.
hibouman
Messages postés13Date d'inscriptiondimanche 1 juin 2003StatutMembreDernière intervention21 juin 2006 24 mai 2006 à 13:15
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...
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 24 mai 2006 à 18:41
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.
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.
hibouman
Messages postés13Date d'inscriptiondimanche 1 juin 2003StatutMembreDernière intervention21 juin 2006 25 mai 2006 à 00:12
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 !
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 26 mai 2006 à 03:36
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;
}