Win32 порядок звонков - PullRequest
       3

Win32 порядок звонков

1 голос
/ 02 апреля 2010

У меня есть два окна, в которые я отправляю сценарий ввода. Процедура идет так:

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

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

У меня были проблемы с тем, что входные данные не были отправлены, и было указано правильное время. Я поместил задержки после каждого вызова и увидел, что входные данные из первого SendInput () были обработаны после того, как window2 выведено на верх То же самое и в конце цикла.

Буферизуются ли вызовы SendInput? Если да, как я могу убедиться в последовательном выполнении этого кода?

Спасибо

Ответы [ 2 ]

1 голос
/ 02 апреля 2010

Ввод, как и большинство сообщений в Win32, проходит две фазы. Сначала это отправлено в очередь. На данный момент окно назначения уже определено. Затем, когда принимающая программа простаивает, она обрабатывается. Даже если ввод не может быть обработан до тех пор, пока второе окно не будет перенесено в Z-порядок, входные сообщения должны были быть поставлены в очередь в первое окно.

Поведение зависит только от того, к какому окну поступает ввод, или же программа должна быть впереди, когда сообщение полностью обработано?

В любом случае, поскольку вы пытаетесь отправить входные данные в определенные окна, а не на то, что пользователь сделал активным, почему бы не PostMessage события, такие как WM_BUTTONDOWN и WM_KEYPRESS, напрямую в их пункты назначения?

0 голосов
/ 02 апреля 2010

со страницы MSDN :

Функция SendInput вставляет события в структурах INPUT последовательно в поток ввода с клавиатуры или мыши. Эти события не перемежаются с другими событиями ввода с клавиатуры или мыши, вставленными пользователем (с помощью клавиатуры или мыши) или вызовами keybd_event, mouse_event или другими вызовами SendInput.

Таким образом, SendInput вставляется во входной поток, где, предположительно, BringWindowToTop выполняется последовательно или вставляется в очередь событий, которая обрабатывается первой. Возможно, вы могли бы найти событие для вызова второго SendInput from, которое будет выполнено после того, как первое окно выведено на передний план.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...