我正在使用带有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。
有更好的解决方案吗?
提前致谢。
编辑: 我已经考虑过这个了,我已经意识到当我禁用/启用缓冲区时我可以删除/重置钩子。设置挂钩是否有明显的开销?