Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.05;
Скачать: CL | DM;

Вниз

Как определить, что приложение освободилось?   Найти похожие ветки 

 
И. Павел ©   (2010-06-08 13:17) [0]

Здравствуйте.

Моя программа должна управлять другим приложением, посылая ему сообщения.
Например, мне нужно нажать на кнопку (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, чтобы дождаться обработки нажатия на кнопку?

Заранее спасибо.


 
RWolf ©   (2010-06-08 13:19) [1]

WaitForInputIdle?


 
И. Павел ©   (2010-06-08 13:29) [2]

> RWolf ©   (08.06.10 13:19)

Огромное вам спасибо! :)


 
Leonid Troyanovsky ©   (2010-06-08 13:29) [3]


> И. Павел ©   (08.06.10 13:17)  

> Подскажите, пожалуйста, как решить эту проблему? Можно ли
> в этом случае как-то использовать Idle (и как), или что-
> то другое?

Хук на подопытный поток обязателен (я уж ранее говорил).
Хотя бы для уведомлений о разрушении нужных окон.

Хуков можно установить несколько, в т.ч. WH_FOREGROUNDIDLE.
В рассматриваемом случае можно следить  (WH_CALLWNDPROC*)
за WM_СOMMAND with EN_CHANGE | EN_UPDATE, посылаемыми
паренту этого эдита, если это, конечно, эдит.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-06-08 13:34) [4]


> И. Павел ©   (08.06.10 13:17)  

>  SendMessage(HBut, WM_LBUTTONDOWN, 0, 0);

Лучше слать BM_CLICK или WM_COMMAND паренту,
с идентификатором кнопки.

--
Regards, LVT.


 
И. Павел ©   (2010-06-08 13:40) [5]

> Хук на подопытный поток обязателен (я уж ранее говорил).
> Хотя бы для уведомлений о разрушении нужных окон.

Окна вряд ли будут закрываться просто так, т.к. программа будет работать на единственной машине, и возможно даже без пользователя.
Но я на всякий случай сделаю отлов Destroy, спасибо.



Страницы: 1 вся ветка

Текущий архив: 2010.09.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.007 c
15-1276207217
Германн
2010-06-11 02:00
2010.09.05
Хочу создать glyph для кнопки.


15-1276098991
KilkennyCat
2010-06-09 19:56
2010.09.05
Наши компоненты.


15-1273206482
12
2010-05-07 08:28
2010.09.05
С днем связи!


4-1239973010
ivashak
2009-04-17 16:56
2010.09.05
Установленные жесткие диски в системе


4-1239772550
SPeller
2009-04-15 09:15
2010.09.05
Как достоверно определить что программа запущена как сервис?