如何在SendInput中使用扩展扫描码

时间:2014-10-09 16:44:06

标签: c++ c winapi

要模拟我必须发送扫描码的一些密钥,为此我使用WinAPI中的SendInput()函数,它在大多数情况下工作正常,但如何使用它来发送此类密钥的扫描码as"暂停"?该密钥生成6字节扫描码(E1 1D 45 E1 9D C5),因为KEYBDINPUT structer中的扫描码具有WORD类型,即允许使用最多2个字节的扫描码。我尝试了1D45扫描码和9DC5与KEYEVENTF_EXTENDEDKEY标志,建议它根据内容应用E0 \ E1代码。我还尝试发送六个1字节命令的序列。但所有这些都无法奏效。

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()
                    }
                }
            }
        };
相关问题