2010-01-07 3 views
1

Я использую sendkeys в C# .NET. У меня есть буквы, стрелки и вводятся в работу. Я не могу понять, как отправить правый клик для контекстного меню. Я знаю, что могу нажимать клавишу на клавиатуре, но я не знаю, как отправить сообщение. Как мне? i googled and sawЩелкните правой кнопкой мыши с SendKeys в .NET.

new MenuItem().PerformClick(); 

как решение, однако, я не видел никакого влияния. Ключи отправляются в другое приложение.

ответ

3

Вы можете обернуть user32.dll, I got the general idea from here

EDIT: Я добавил в PosX и Пози, который был бы координаты мыши.

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

Вы не можете отправить ввод мыши с использованием класса .NET SendKeys. По крайней мере, я не знаю и не документирую. Лучший способ сделать это - перейти на WinAPI и использовать метод SendInput. Вы можете использовать это в .NET, используя DllImport для функции (в «user32.dll») и StructLayout для структур.

Тогда вы хотите назвать это так:

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

Предполагая, что вы имеете в виду ключ расположены несколько мест справа от пробела, который выполняет ту же операцию, правой кнопкой мыши в некоторых ситуациях {MENU} может быть специальный ключ, который вы хотите Отправить. Он не реализован в некоторых вариантах SendKeys, и я не уверен в последней версии C# .NET.

0

Клавиша {MENU} не всегда доступна, как отмечено @Sparr. Однако shift-F10 вызывает контекстное меню в большинстве приложений Windows. Поэтому SendKeys.SendWait("+{F10}"); должен работать.

Смежные вопросы