要模拟我必须发送扫描码的一些密钥,为此我使用WinAPI中的SendInput()函数,它在大多数情况下工作正常,但如何使用它来发送此类密钥的扫描码as"暂停"?该密钥生成6字节扫描码(E1 1D 45 E1 9D C5),因为KEYBDINPUT structer中的扫描码具有WORD类型,即允许使用最多2个字节的扫描码。我尝试了1D45扫描码和9DC5与KEYEVENTF_EXTENDEDKEY标志,建议它根据内容应用E0 \ E1代码。我还尝试发送六个1字节命令的序列。但所有这些都无法奏效。
答案 0 :(得分:0)
我找到了答案。您必须向阵列发送两个输入以用于SendInput。第一个条目是0xE0,第二个条目是你的扫描码。
我实际上在这里找到了解决方案,嵌入在图形中:https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa299374(v=vs.60)
参见代码。这是C#,但你会明白这一点。
inputs = new[]
{
new WinAPI.INPUT
{
type = WinAPI.INPUT_KEYBOARD,
u = new WinAPI.InputUnion
{
ki = new WinAPI.KEYBDINPUT()
{
wScan = (ushort) 0xe0,
wVk = (ushort) 0,
dwFlags = (ushort) dwFlags,
dwExtraInfo = WinAPI.GetMessageExtraInfo()
}
}
},
new WinAPI.INPUT
{
type = WinAPI.INPUT_KEYBOARD,
u = new WinAPI.InputUnion
{
ki = new WinAPI.KEYBDINPUT()
{
wScan = (ushort) tscancode,
wVk = (ushort) tvk,
dwFlags = (ushort) dwFlags,
dwExtraInfo = WinAPI.GetMessageExtraInfo()
}
}
}
};