2016-10-18 6 views
-2

My app1 PostMessage WM_LBUTTONDOWN и WM_LBUTTONUP к app2 (стороннему), который находится в другом процессе.Как обеспечить, чтобы PostMessage обрабатывался другим приложением?

Как убедиться, что сообщение было обработано app2 в приложении 1, логика в приложении 1 зависит от результата этих сообщений после PostMessage.

Вот псевдо-код для app1

PostMessage(app2Handle, WM_LBUTTON_DOWN, 0, lParam); 
PostMessage(app2Handle, WM_LBUTTON_UP, 0, lParam); 
// How to ensure above messages has been handled by app2 here? 
+0

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

+0

UI Automation не очень надежна для неактивного окна. т. е. нажатие элемента TreeView требует, чтобы окна были активны. Вот почему я перешел на win32 API. – user1633272

+1

Это полная чепуха. UI Automation ** является ** надежным, независимо от того, активно ли целевое окно или нет. Во всяком случае, прочитайте [Повторный ввод не совпадает с его обработкой] (https://blogs.msdn.microsoft.com/oldnewthing/20121206-00/?p=5903) и [Вы не можете имитировать ввод с помощью клавиатуры с помощью PostMessage] (https://blogs.msdn.microsoft.com/oldnewthing/20050530-11/?p=35513/), чтобы понять, почему это не может работать. – IInspectable

ответ

1

PostMessage() работает асинхронно. Он просто помещает сообщение в очередь сообщений целевого окна, а затем немедленно завершает работу. При обработке сообщения нет уведомлений. Если вам нужно это знать, вы можете попробовать использовать крючок сообщения от SetWindowsHookEx() для контроля за действиями очереди сообщений и/или окна окна целевого окна. Или, может быть, вы можете использовать SetWinEventHook() для получения таких событий, как EVENT_OBJECT_INVOKED, EVENT_OBJECT_SELECTION... и т. Д., Если сообщения мыши предназначены для таких действий щелчка/выбора в окне.

Смежные вопросы