2010-01-07 7 views
1

J'utilise sendkeys en C# .NET. J'ai des lettres, des flèches et je travaille. Je n'arrive pas à comprendre comment envoyer un clic droit pour le menu contextuel. Je sais que je peux appuyer sur une touche de mon clavier pour le faire mais je n'ai aucune idée de comment envoyer le msg. Comment puis-je? J'ai googlé et vuClic droit avec SendKeys dans .NET

new MenuItem().PerformClick(); 

comme une solution mais je n'ai vu aucun effet. Les clés sont envoyées à une autre application.

Répondre

3

Vous pouvez envelopper user32.dll, I got the general idea from here

EDIT: J'ai ajouté dans posX et posY, qui serait le coordonnées de la souris.

using System; 
using System.Runtime.InteropServices; 

namespace WinApi 
{ 
    public class Mouse 
    { 
      [DllImport("user32.dll")] 
      private static extern void mouse_event(UInt32 dwFlags,UInt32 dx,UInt32 dy,UInt32 dwData,IntPtr dwExtraInfo); 

      private const UInt32 MouseEventRightDown = 0x0008; 
      private const UInt32 MouseEventRightUp = 0x0010; 

      public static void SendRightClick(UInt32 posX, UInt32 posY) 
      { 
       mouse_event(MouseEventRightDown, posX, posY, 0, new System.IntPtr()); 
       mouse_event(MouseEventRightUp, posX, posY, 0, new System.IntPtr()); 
      }  
    } 
} 
1

Vous ne pouvez pas envoyer d'entrée de souris à l'aide de la classe .NET SendKeys. Au moins, pas que je sache ni c'est documenté. La meilleure façon de procéder est de passer à WinAPI et d'utiliser la méthode SendInput. Vous pouvez l'utiliser dans .NET en utilisant DllImport pour la fonction (dans "user32.dll") et StructLayout pour les structures.

Ensuite, vous voudrez l'appeler comme ceci:

INPUT pressRight; 
pressRight.type = MOUSE; // = 0 
pressRight.mi.dx = 0; 
pressRight.mi.dy = 0; 
pressRight.mi.mouseData = 0; 
pressRight.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN; // = 8 
pressRight.mi.time = 0; 
pressRight.mi.dwExtraInfo = IntPtr.Zero; 

INPUT releaseRight = pressRight; 
releaseRight.mi.dwFlags = MOUSEEVENTF_RIGHTUP; // = 10 

INPUT[] inputs = new INPUT[2]; 
inputs[0] = pressRight; 
inputs[1] = releaseRight; 

SendInput(2, inputs, Marshal.SizeOf(typeof(INPUT))); 
2

En supposant que vous faites référence à la clé placé quelques bons endroits de la barre d'espace, qui effectue la même opération que le bouton droit de la souris dans certaines situations, {MENU} peut être la clé spéciale que vous voulez envoyer. Il n'est pas implémenté dans certaines variantes de SendKeys, et je ne suis pas sûr de la dernière version de C# .NET.

0

La touche {MENU} n'est pas toujours disponible, comme indiqué par @Sparr. Cependant, shift-F10 affiche le menu contextuel dans la plupart des applications Windows. Donc, SendKeys.SendWait("+{F10}"); devrait fonctionner.