在SendInput中发送Shift / Alt / Ctrl

时间:2013-09-12 10:16:30

标签: c# input keyboard key

我正在编写一个控制器程序,它模拟任何活动应用程序的击键。我找到了这样的SendInput方法(我只关心键盘,省略了无关的定义):

[StructLayout(LayoutKind.Explicit)]
public struct INPUT
{
    [FieldOffset(0)]
    public Int32 type;
    [FieldOffset(4)]
    public KEYBDINPUT ki;
    [FieldOffset(4)]
    public MOUSEINPUT mi;
    [FieldOffset(4)]
    public HARDWAREINPUT hi;
}
[StructLayout(LayoutKind.Sequential)]
public struct KEYBDINPUT
{
    public Int16 wVk;
    public Int16 wScan;
    public Int32 dwFlags;
    public Int32 time;
    public IntPtr dwExtraInfo;
}
[DllImport("user32.dll")]
public static extern UInt32 SendInput(UInt32 nInputs, ref INPUT pInputs, int cbSize);

我知道wVkwScan可以通过System.Windows.Forms.Keys enumation值分配。我还查看了值,发现Shift=65536, Control=131072, Alt=262144(所有键的值都是1-254)。我也知道这三个值应该在wScan(对应的1,2,4)中,它们是修饰符状态标志。但有三个问题:

  1. 例如,我想将左Ctrl键发送到活动应用程序,我必须同时通过wVk==LControlKeywScan==Control吗?如果我只通过第一个而不是第二个会怎么样?我应该通过wVk==LControlKey; wScan==Control; dwFlags==0(关键字dwFlags)和wVk==LControlKey; wScan==0; dwFlags==2(关键字dwFlags)吗?

  2. Keys enumation中存在LControlKey, RControlKey, ControlKey,第三个是什么意思?

  3. Keys enumation中存在Control键和Shift键,但为什么不使用Alt键?那么是不是可以通过SendInput方法发送Alt按键?

0 个答案:

没有答案