1

我在 C# .NET 中使用 sendkeys。我有字母、方向键和输入工作。我不知道如何发送右键单击上下文菜单。我知道我可以按键盘上的一个键来执行此操作,但我不知道如何发送消息。我如何能?我用谷歌搜索并看到了

new MenuItem().PerformClick();

作为一种解决方案,但我没有看到任何影响。密钥正在发送到另一个应用程序。

4

4 回答 4

3

您可以包装 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());
            }    
    }
}
于 2010-01-07T22:32:47.880 回答
2

假设您指的是位于空格键右侧几个位置的键,在某些情况下执行与鼠标右键相同的操作,{MENU}可能是您要发送的特殊键。它没有在一些 SendKeys 变体中实现,我不确定 C#.NET 的最新版本。

于 2010-01-07T23:12:54.287 回答
1

您不能使用 .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)));
于 2010-01-07T22:28:26.163 回答
0

正如@Sparr 所指出的,{MENU} 键并不总是可用的。但是,shift-F10 会在大多数 Windows 应用程序中调出上下文菜单。所以SendKeys.SendWait("+{F10}");应该工作。

于 2014-05-14T05:11:37.143 回答