我在 C# .NET 中使用 sendkeys。我有字母、方向键和输入工作。我不知道如何发送右键单击上下文菜单。我知道我可以按键盘上的一个键来执行此操作,但我不知道如何发送消息。我如何能?我用谷歌搜索并看到了
new MenuItem().PerformClick();
作为一种解决方案,但我没有看到任何影响。密钥正在发送到另一个应用程序。
我在 C# .NET 中使用 sendkeys。我有字母、方向键和输入工作。我不知道如何发送右键单击上下文菜单。我知道我可以按键盘上的一个键来执行此操作,但我不知道如何发送消息。我如何能?我用谷歌搜索并看到了
new MenuItem().PerformClick();
作为一种解决方案,但我没有看到任何影响。密钥正在发送到另一个应用程序。
您可以包装 user32.dll,我从这里得到了大致的想法
编辑: 我添加了 posX 和 posY,这将是鼠标坐标。
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());
}
}
}
假设您指的是位于空格键右侧几个位置的键,在某些情况下执行与鼠标右键相同的操作,{MENU}可能是您要发送的特殊键。它没有在一些 SendKeys 变体中实现,我不确定 C#.NET 的最新版本。
您不能使用 .NETSendKeys
类发送鼠标输入。至少,我不知道也没有记录。最好的方法是切换到 WinAPI 并使用该SendInput
方法。您可以在 .NETDllImport
中将其用于函数(在“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)));
正如@Sparr 所指出的,{MENU} 键并不总是可用的。但是,shift-F10 会在大多数 Windows 应用程序中调出上下文菜单。所以SendKeys.SendWait("+{F10}");
应该工作。