C# 发送输入外部信息/标志

C# 发送输入外部信息/标志,c#,flags,sendinput,C#,Flags,Sendinput,我正在尝试将SendInput api用于热键应用程序。所以我要做的是有一个全局键钩,当一些组合键点击时,我想发送另一个键 我的问题是,当我发送模拟键时,我的钩子接收到该消息,我最终得到一个递归循环 因此,我尝试使用ExtraInfo/标志,但由于某些原因,我设置的值与我在钩子中收到的值不同 var down = new INPUT(); down.Type = (UInt32)InputType.Keyboard; down.Data.Keyboard = new KEYBDINPUT();

我正在尝试将SendInput api用于热键应用程序。所以我要做的是有一个全局键钩,当一些组合键点击时,我想发送另一个键

我的问题是,当我发送模拟键时,我的钩子接收到该消息,我最终得到一个递归循环

因此,我尝试使用ExtraInfo/标志,但由于某些原因,我设置的值与我在钩子中收到的值不同

var down = new INPUT();
down.Type = (UInt32)InputType.Keyboard;
down.Data.Keyboard = new KEYBDINPUT();
down.Data.Keyboard.KeyCode = (UInt16)keyCode;
down.Data.Keyboard.Scan = 0;
down.Data.Keyboard.Flags = 0; //doesn't matter whatever I set here... never gets back to my hook
down.Data.Keyboard.Time = 0;
down.Data.Keyboard.ExtraInfo = IntPtr.Zero; //doesn't matter whatever I set here... never gets back to my hook
无论我在ExtraInfo/标志上设置了什么。。。当我在钩子中收到消息时,它会重置:

    private IntPtr KeyStateChangeCallback(int nCode, IntPtr wParam, ref KEYBDINPUT lParam)
    {
       //lParam.ExtraInfo and lParam.Flags ... is always some mumbo jumbo value or zero...
    }
我使用低层键盘挂钩“WH\u KEYBOARD\u LL”进行如下设置:

        proc = KeyStateChangeCallback;
        using (Process curProcess = Process.GetCurrentProcess())
        using (ProcessModule curModule = curProcess.MainModule)
        {
            hookID = NativeMethods.SetWindowsHookEx(WH_KEYBOARD_LL, proc, NativeMethods.GetModuleHandle(curModule.ModuleName), 0);
        }

还有谁有类似的问题可以帮我吗?任何工作代码示例都将非常棒:)

根据,您应该调用get在
ExtraInfo
字段中检索数据。

您使用的是什么类型的钩子?谢谢:)我正在使用WHU键盘钩子,再次查看帖子-使用其他信息更新它。谢谢,这实际上是我到目前为止一直在使用的解决方案,但我认为将值与消息本身一起传递会更安全-因为使用GetMessageExtraInfo需要使用SetMMessageExtranfo,而不能在“每输入”的基础上使用它。。。只有在每一条信息上,而一条信息可以由多个输入组成,“按键”如“a键向下”、“B键向下”、“a键向上”等。。。那么旗帜的问题呢?显然,没有标志的Set/Get组合,对吗?嗯,在x64模式下运行应用程序时,它似乎可以发送ExtraInfo,但在x86模式下则不行。(计算机也是x64)所以看起来其中一个结构不正确。。。但我不知道是哪个。。。