SetWindowsHookEx发送多个事件

时间:2013-03-11 00:50:09

标签: windows xna keyboard keyboard-hook setwindowshookex

我正在使用带有C#的SetWindowsHookEx来允许我使用缓冲键盘输入(对于文本框)。

现在的基本设置是每次我创建一个新文本框时,文本框会在内部创建一个新的“KeyboardBuffer”对象,然后设置一个键盘钩子:

    public KeyboardBuffer(IntPtr whnd)
    {
        this.ProcessMessagesCallback = new GetMsgProc(ProcessMessages);
        this.HookHandle = SetWindowsHookEx(HookId.WH_GETMESSAGE, this.ProcessMessagesCallback,
                                           IntPtr.Zero, GetCurrentThreadId());
    }

(可以看到完整代码here

问题是,如果我有N个文本框,当我输入一个文本框时,我会收到相同的字符N次,问题源于SetWindowsHookEx不区分.NET实例。

我通过创建一个所有文本框都可以访问的静态KeyboardBuffer对象来暂时解决这个问题,但是这引起了许多其他问题,而且在我看来,这似乎是hackish。

有更好的解决方案吗?

提前致谢。

编辑: 我已经考虑过这个了,我已经意识到当我禁用/启用缓冲区时我可以删除/重置钩子。设置挂钩是否有明显的开销?

0 个答案:

没有答案