我有两个窗口,我发送脚本输入。程序如此
BringWindowToTop( window1 );
i = Build input structures( window1 );
SendInput(i);
BringWindowToTop( window2 );
i = Build input structures( window2 );
SendInput(i);
我遇到输入未被发送和正确时间的问题。我在每次调用后都设置了延迟,并且看到第一个SendInput()的输入在window2被放到顶部之后被处理。在循环结束时也是如此。
SendInput调用是否已缓冲?如果是这样,我如何确保此代码的串行执行?
由于
答案 0 :(得分:1)
与Win32中的大多数消息一样,输入经历了两个阶段。首先,它被发布到队列中。此时,目标窗口已经确定。然后当接收程序空闲时,它被处理。即使在Z顺序中提出第二个窗口之后才可能处理输入,输入消息应该排队到第一个窗口。
行为是否仅依赖于输入所在的窗口,或者在完全处理消息时程序是否也必须位于最前面?
无论如何,既然你试图将输入发送到特定的窗口而不是用户激活的内容,为什么不将WM_BUTTONDOWN和WM_KEYPRESS之类的事件直接发送到目的地呢?
答案 1 :(得分:0)
来自MSDN页面:
SendInput函数将INPUT结构中的事件串行插入键盘或鼠标输入流。这些事件没有穿插用户(使用键盘或鼠标)或通过调用keybd_event,mouse_event或其他对SendInput的调用插入的其他键盘或鼠标输入事件。
因此,SendInput
正在插入到输入流中,可能是BringWindowToTop
正在串行执行,或者插入到先处理的事件队列中。也许你可以找到一个事件来调用第二个SendInput
,这将在第一个窗口被带到前面后执行。