我在这个领域做了一些研究(通过单个输入设备),发现在大多数情况下,消息是成对发送的,首先是 WM_INPUT,然后是 WM_KEYDOWN。因此,只能将它们链接在一起进行过滤,即 WM_INPUT 标志它对应的 WM_KEYDOWN 不应发送给接收者(在我的情况下,首先我丢弃所有 WM_KEYDOWN 然后决定何时需要将它们发送回他们的收件人)。我只是假设所有下一个 WM_KEYDOWN 都属于最后一个 WM_INPUT。
我的问题正是:我可以认真地依赖这个原则吗?如果我使用多个输入设备,这些消息不会混淆吗?
关于它的可靠性已经存在一些严重的问题: 1. 我如何区分来自多个设备的重复输入(答案很明显 - 我不能)。2. 如果来自多个设备的输入,WM_INPUT-WM_KEYDOWN 对会混淆吗?即形成一个像WM_INPUT、WM_INPUT、WM_KEYDOWN、WM_KEYDOWN这样的队伍?
另外也许可以丢弃所有 WM_KEYDOWN 并自己生成所有键盘事件?尽管这在技术上是相当困难的,因为一个 WM_INPUT 可能有多个 WM_KEYDOWN(键重复以这种方式工作,多个 WM_KEYDOWN,一个 WM_KEYUP)。
以防万一,这就是我需要实现的目标:我需要按时间过滤所有消息。所有用户输入都按按键之间的时间间隔过滤。如果以 <50ms 的间隔发送了两条消息,我将丢弃第一条消息并在其 TTL 超过时等待第二条消息,如果是,则将其发送给其收件人。困难在于可以有多个输入设备,并且这些时间会相互混淆。