我将 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 对象暂时解决了这个问题,但这导致了许多其他问题,而且在我看来,这看起来很简单。
有更好的解决方案吗?
提前致谢。
编辑:我对此进行了更多的考虑,并且我意识到我可以在禁用/启用缓冲区时删除/重置挂钩。设置挂钩是否有任何明显的开销?