[英]Using SendInput on Win7 x64, SHIFT doesn't work
我正在开发的大型应用程序中有一个虚拟键盘。 合成的击键是使用SendInput
实现的。 最初,键盘是为win 7 x86开发的,并且一切正常,并且仍然可以正常工作。 但是,我在使用x64时遇到问题。
首先,Caps Lock命令将卡住。 可以启用它,但决不能禁用它。 此时,我正在定义没有MOUSEINPUT
和HARDWAREINPUT
的INPUT
结构。
[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.