0
我有一个虚拟键盘作为我正在开发的一个更大的应用程序的一部分。合成的击键是使用SendInput
实现的。原本键盘是为win 7 x86开发的,一切运行良好,仍然如此。但是,我有问题与64位。在Win7 x64上使用SendInput,SHIFT不起作用
首先,Caps Lock命令会卡住。它可以启用,但从不禁用。在这一点上,我定义了INPUT
结构,没有MOUSEINPUT
和HARDWAREINPUT
。
[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;
};
在试图获取大写锁定功能工作,我切换到定义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命令不起作用。任何帮助将不胜感激。