soussous78
Messages postés47Date d'inscriptionmardi 21 novembre 2006StatutMembreDernière intervention 5 novembre 2016
-
26 avril 2008 à 13:07
soussous78
Messages postés47Date d'inscriptionmardi 21 novembre 2006StatutMembreDernière intervention 5 novembre 2016
-
28 avril 2008 à 03:36
Bonjour a tous,
J'ai un petit problème sur c#
Je recherche comment simuler un clic de souris..
Je m'explique :
J'ai une application qui déplace la souris au clavier, sur tout l'ecran même hors mon application.
je recherche comment je pourrai cliquer avec la touche Espace. Pour ouvrir par exemple un dossier.
J'ai cru comprendre qu'on pouvait passer par L'api mais je n'ai pas compris grand chose. Si quelqu'un a un tuto simple ou une reponse à mon problème, je suis grand preneur.
voici ou j'en suis
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;
switch(keyData)
{
case Keys.Up:
Cursor.Position.Y--;
break;
case Keys.Down:
En gros je veux que losque j'appuie sur la touche espace, que
l'ordinateur le comprenne comme un clic, peu importe ou la souris se
situe sur l'écran.
Merci d'avance de vos réponse.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 26 avril 2008 à 15:09
Salut pour simuler le clavier ou la souris il faut utiliser SendInput, tu as de nombreux exemples sur le site. L'autre problème qui va se poser, c'est que ton appli une fois qu'elle va perdre le focus ne recevra plus les évènements clavier/souris, il faut installer un hook pour ça.
soussous78
Messages postés47Date d'inscriptionmardi 21 novembre 2006StatutMembreDernière intervention 5 novembre 2016 28 avril 2008 à 03:36
Pour ceux a qui ça interresserai, je post ce que j'ai fait pour y arriver...J'espère que c'est ce qu'il y a de mieux. en tout cas ca marche.
Je ne me suis pas encore penché sur le hook mais j'ai déjà fait un grand bond.
Merci Lutinore et coq.
Méthodes a ajouter :
[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 Form1.INPUT();
aInput.type = 0;
aInput.mi.dwExtraInfo = 0;
aInput.mi.mouseData = 0;
aInput.mi.time = 0;
// simule l'appui sur le bouton gauche de la souris
aInput.mi.dwFlags = Form1.MOUSEEVENTF_LEFTDOWN;
// on envoi l'appui (Form1 est le nom de ma form..)
Form1.SendInput(1, ref aInput, Marshal.SizeOf(aInput));
// simule le relachement du bouton gauche de la souris
aInput.mi.dwFlags = Form1.MOUSEEVENTF_LEFTUP;
// on envoi le relachement (Form1 est le nom de ma form..)
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 26 avril 2008 à 18:46
Salut,
Attention avec SendInput sous Vista, l'UIPI peut bloquer son appel sans pour autant que ça soit signifié par un échec.
Concernant le hook, il serait peut être intéressant de creuser aussi du côté de RegisterHotKey pour la notatification (je ne me souviens plus si on peut l'utiliser pour une touche sans modificateur).