Winapi Win32呼叫顺序

Winapi Win32呼叫顺序,winapi,Winapi,我有两个窗口可以发送脚本输入。程序是这样的 BringWindowToTop( window1 ); i = Build input structures( window1 ); SendInput(i); BringWindowToTop( window2 ); i = Build input structures( window2 ); SendInput(i); 我遇到了输入未发送和正确时间的问题。我在每次调用后都设置了延迟,并看到第一个SendInput()的输入是在window2到

我有两个窗口可以发送脚本输入。程序是这样的

BringWindowToTop( window1 );
i = Build input structures( window1 );
SendInput(i);

BringWindowToTop( window2 );
i = Build input structures( window2 );
SendInput(i);
我遇到了输入未发送和正确时间的问题。我在每次调用后都设置了延迟,并看到第一个SendInput()的输入是在window2到达顶端后处理的。循环结束时也是一样

SendInput调用是否缓冲?如果是这样,我如何确保该代码的串行执行

从页面中感谢您

SendInput函数将输入结构中的事件串行插入键盘或鼠标输入流。这些事件不会与用户(使用键盘或鼠标)或通过调用keybd_事件、mouse_事件或其他调用SendInput插入的其他键盘或鼠标输入事件混在一起

因此,
SendInput
插入到输入流中,其中,
bringwindowtop
可能是串行执行的,或者插入到首先处理的事件队列中。也许您可以找到一个事件来调用第二个
SendInput
,该事件将在第一个窗口被置于最前面后执行。

从以下页面:

SendInput函数将输入结构中的事件串行插入键盘或鼠标输入流。这些事件不会与用户(使用键盘或鼠标)或通过调用keybd_事件、mouse_事件或其他调用SendInput插入的其他键盘或鼠标输入事件混在一起


因此,
SendInput
插入到输入流中,其中,
bringwindowtop
可能是串行执行的,或者插入到首先处理的事件队列中。也许您可以找到一个事件来调用第二个
SendInput
,该事件将在第一个窗口出现后执行。

输入与Win32中的大多数消息一样,经历两个阶段。首先,它被发布到队列中。此时,目标窗口已经确定。然后,当接收程序空闲时,它被处理。即使在第二个窗口按Z顺序向前移动之前可能不会处理输入,输入消息也应该排队到第一个窗口

行为是否仅依赖于输入到哪个窗口,或者当消息被完全处理时,程序是否也必须位于最前面


无论如何,既然您试图将输入发送到特定的窗口,而不是用户激活的任何窗口,为什么不将WM_BUTTONDOWN和WM_KEYPRESS等事件直接发送到它们的目的地呢?

输入与Win32中的大多数消息一样,经历两个阶段。首先,它被发布到队列中。此时,目标窗口已经确定。然后,当接收程序空闲时,它被处理。即使在第二个窗口按Z顺序向前移动之前可能不会处理输入,输入消息也应该排队到第一个窗口

行为是否仅依赖于输入到哪个窗口,或者当消息被完全处理时,程序是否也必须位于最前面


无论如何,既然您试图将输入发送到特定的窗口,而不是用户激活的任何窗口,为什么不将WM_BUTTONDOWN和WM_KEYPRESS等事件直接发送到其目的地?

并非所有应用程序都响应windows消息。有些人会忽略它并检查循环中输入设备的当前状态。是的,输入到正确的窗口是很重要的。@DD:像这样的程序确实存在,但它们非常罕见。要获取当前状态,您必须竭尽全力(例如GetAsyncKeyState vs GetKeyState)。另外,还有一个不同的函数可以直接将输入发送到控制台窗口。也许如果你能更好地描述你的具体情况,社区可以提供更好的建议。第一个窗口是FLTK窗口。我试着按顺序发布:WM_MOUSEMOVE WM_LBUTTONDOWN WM_MOUSEMOVE WM_LBUTTONUP,但它没有响应任何一个。我所要做的就是将鼠标/键盘输入发送到特定窗口。即,尝试编写此函数:SendInputToWindow(HWND h,INPUT i);您是否将消息发送到了正确的子窗口?ChildWindowFromPoint在这里可能会有所帮助。对一些有效,对其他无效。MicrosoftExcel2010是一个拖动不起作用的版本。我可以单击单元格,但不能单击并拖动以选择多个单元格。例如,它不响应。相同的拖动代码适用于其他带有滑块的应用程序。遗憾的是,Excel是一个巨大的需求。并非所有的应用程序都响应windows消息。有些人会忽略它并检查循环中输入设备的当前状态。是的,输入到正确的窗口是很重要的。@DD:像这样的程序确实存在,但它们非常罕见。要获取当前状态,您必须竭尽全力(例如GetAsyncKeyState vs GetKeyState)。另外,还有一个不同的函数可以直接将输入发送到控制台窗口。也许如果你能更好地描述你的具体情况,社区可以提供更好的建议。第一个窗口是FLTK窗口。我试着按顺序发布:WM_MOUSEMOVE WM_LBUTTONDOWN WM_MOUSEMOVE WM_LBUTTONUP,但它没有响应任何一个。我所要做的就是将鼠标/键盘输入发送到特定窗口。即,尝试编写此函数:SendInputToWindow(HWND h,INPUT i);您是否将消息发送到了正确的子窗口?ChildWindowFromPoint在这里可能会有所帮助。对一些有效,对其他无效。MicrosoftExcel2010是一个拖动不起作用的版本。我可以单击单元格,但不能单击并拖动以选择多个单元格。例如,它不响应。相同的拖动代码适用于其他带有滑块的应用程序。不幸的是,Excel是一个巨大的需求。