![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить, что приложение освободилось?
И. Павел © (2010-06-08 13:17:00)Здравствуйте.
Моя программа должна управлять другим приложением, посылая ему сообщения.
Например, мне нужно нажать на кнопку (HBut) в чужом приложении (точнее это какая-то панель, т.е. класс не button). После этого изменится текст в окне HTxt (хотя он может и остаться прежним). На основании нового текста моя программа решает: стоит ли нажать на кнопку второй раз (это утрировано, но суть примерно в этом).
SendMessage(HBut, WM_LBUTTONDOWN, 0, 0);
SendMessage(HBut, WM_LBUTTONUP, 0, 0);
SendMessage(HTxt, WM_GETTEXT, WParam(StrBufSize(s)), LParam(s));
//что сюда написать – не знаю
if s = ‘12345’ then
begin
SendMessage(HBut, WM_LBUTTONDOWN, 0, 0);
SendMessage(HBut, WM_LBUTTONUP, 0, 0);
end;
Возникшая у меня проблема заключается в том, что текст в HTxt не успевает поменяться между нажатием и WM_GetText.
У меня была идея – отлавливать через хуки сообщение Idle для чужой программы. Но в этом случае нельзя будет сказать – связано сообщение с завершением обработки нажатия на кнопку или с более ранними действиями.
Подскажите, пожалуйста, как решить эту проблему? Можно ли в этом случае как-то использовать Idle (и как), или что-то другое? Можно ли что-нибудь написать перед if, чтобы дождаться обработки нажатия на кнопку?
Заранее спасибо.
И. Павел (2010-06-08 13:40:00) [1]> Хук на подопытный поток обязателен (я уж ранее говорил).
> Хотя бы для уведомлений о разрушении нужных окон.
Окна вряд ли будут закрываться просто так, т.к. программа будет работать на единственной машине, и возможно даже без пользователя.
Но я на всякий случай сделаю отлов Destroy, спасибо.
Leonid Troyanovsky (2010-06-08 13:34:00) [2]
> И. Павел © (08.06.10 13:17)
> SendMessage(HBut, WM_LBUTTONDOWN, 0, 0);
Лучше слать BM_CLICK или WM_COMMAND паренту,
с идентификатором кнопки.
--
Regards, LVT.
И. Павел (2010-06-08 13:29:00) [3]> RWolf © (08.06.10 13:19)
Огромное вам спасибо! :)
Leonid Troyanovsky (2010-06-08 13:29:00) [4]
> И. Павел © (08.06.10 13:17)
> Подскажите, пожалуйста, как решить эту проблему? Можно ли
> в этом случае как-то использовать Idle (и как), или что-
> то другое?
Хук на подопытный поток обязателен (я уж ранее говорил).
Хотя бы для уведомлений о разрушении нужных окон.
Хуков можно установить несколько, в т.ч. WH_FOREGROUNDIDLE.
В рассматриваемом случае можно следить (WH_CALLWNDPROC*)
за WM_СOMMAND with EN_CHANGE | EN_UPDATE, посылаемыми
паренту этого эдита, если это, конечно, эдит.
--
Regards, LVT.
RWolf (2010-06-08 13:19:00) [5]WaitForInputIdle?