SendInput ExtraInfo / Flags

时间:2012-11-17 01:42:23

标签: c# flags sendinput

我正在尝试将SendInput api用于热键应用程序。所以我正在做的是拥有一个全局的keyhook,当一些keycombination命中时,我想发送另一个密钥。

我的问题是,当我发送模拟密钥时,我的钩子会收到该消息,最后我会得到一个递归循环。

所以,我尝试过使用ExtraInfo / Flags,但由于某些原因,我设置的值与我在钩子中收到的值不同。

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 / Flags上设置什么...当我在钩子中收到消息时它会被重置:

    private IntPtr KeyStateChangeCallback(int nCode, IntPtr wParam, ref KEYBDINPUT lParam)
    {
       //lParam.ExtraInfo and lParam.Flags ... is always some mumbo jumbo value or zero...
    }

我正在使用lowlevelkeyboard hook,“WH_KEYBOARD_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);
        }

其他人有类似的问题,可以帮助我吗?任何工作代码示例都很棒:)

1 个答案:

答案 0 :(得分:1)

根据documentation,您应致电GetMessageExtraInfo获取ExtraInfo字段中的数据。