1

我将 SetWindowsHookEx 与 C# 一起使用,以允许我缓冲键盘输入(用于文本框)。

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

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

(完整的代码可以在这里看到)

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

我通过制作一个所有文本框都可以访问的静态 KeyboardBuffer 对象暂时解决了这个问题,但这导致了许多其他问题,而且在我看来,这看起来很简单。

有更好的解决方案吗?

提前致谢。

编辑:我对此进行了更多的考虑,并且我意识到我可以在禁用/启用缓冲区时删除/重置挂钩。设置挂钩是否有任何明显的开销?

4

0 回答 0