繁体   English   中英

在Win7 x64上使用SendInput,SHIFT不起作用

[英]Using SendInput on Win7 x64, SHIFT doesn't work

我正在开发的大型应用程序中有一个虚拟键盘。 合成的击键是使用SendInput实现的。 最初,键盘是为win 7 x86开发的,并且一切正常,并且仍然可以正常工作。 但是,我在使用x64时遇到问题。

首先,Caps Lock命令将卡住。 可以启用它,但决不能禁用它。 此时,我正在定义没有MOUSEINPUTHARDWAREINPUTINPUT结构。

    [StructLayoutAttribute(LayoutKind.Explicit)]
    public struct KEYBDINPUT
    {
        [FieldOffset(0)]
        public ushort wVk;
        [FieldOffset(4)]
        public ushort wScan;
        [FieldOffset(8)]
        public uint dwFlags;
        [FieldOffset(16)]
        public long time;
        [FieldOffset(20)]
        public IntPtr dwExtraInfo;
    };

    [StructLayout(LayoutKind.Explicit, Size = 28)]
    public struct INPUT
    {
        [FieldOffset(0)]
        public uint type;
#if WIN64
        [FieldOffset(8)]
#else 
        [FieldOffset(4)]
#endif
        public KEYBDINPUT ki;
    };

为了使Caps Lock功能正常工作,我改用INPUT定义为:

[StructLayout(LayoutKind.Sequential)]
public struct MOUSEINPUT {
    public int dx;
    public int dy;
    public uint mouseData;
    public uint dwFlags;
    public uint time;
    public IntPtr dwExtraInfo;
}

[StructLayout(LayoutKind.Sequential)]
public struct KEYBDINPUT {
    public ushort wVk;
    public ushort wScan;
    public uint dwFlags;
    public uint time;
    public IntPtr dwExtraInfo;
}

[StructLayout(LayoutKind.Sequential)]
public struct HARDWAREINPUT {
    public int uMsg;
    public short wParamL;
    public short wParamH;
}

[StructLayout(LayoutKind.Explicit)]
public struct MouseKeybdHardwareInputUnion {
    [FieldOffset(0)]
    public MOUSEINPUT mi;

    [FieldOffset(0)]
    public KEYBDINPUT ki;

    [FieldOffset(0)]
    public HARDWAREINPUT hi;
}

[StructLayout(LayoutKind.Sequential)]
public struct INPUT {
    public uint type;
    public MouseKeybdHardwareInputUnion mkhi;
}

但是,现在SHIFT命令不起作用。 任何帮助将不胜感激。

弄清楚了。 在某个时刻,对于KeyDown调用,我已将SendInput的'size'参数更改为:

intReturn = SendInput(1, ref structInput, 28); 

什么时候应该是:

intReturn = SendInput(1, ref structInput, Marshal.SizeOf(structInput));

除了SHIFT键,此键不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM