![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с сообщениями Windows
Putnik © (2007-09-01 10:39:00)Уважаемые мастера форума, я столкнулся с такой проблемой: пишу программу для автоматизации действий с некоторой программой( Хроматек Аналитик), в нее входит автоматическое открытие файла, ввод в диалоговые окна нужных значений, сохраннение файла, дело в том что после открытия первого диалогового окна которому я хотел бы послать сообщением wm_settext, ничего не происходит, а выполняются следующие команды, связанные с открытием и поиском следующего диалогового окна, в итоге получается куча диалоговых окон до которых не доходят посылаемые сообщения.
Я полагаю что это может быть связано с тем, что сообщения главному окну "главнее" дочерних окон, может быть что диалоговые окна создаются из ресурсов, или в моем полном непонимании принципов обмена сообщения, в этом случае просветите меня, пожалуйста!
p.s. при выполнении пошагово f8 из среды разработки все выполняется как и задумывалось
p.p.s. я не программист, а химик, сильно ногами не пинать:)
Putnik (2007-09-04 12:42:00) [1]Спасибо, что приняли участие.
> [7] поиск будет содержаться в условии, а не в теле
{RASkov} (2007-09-02 14:13:00) [2]> условием выхода из которого, будет являтся ненулевой handle
> что должно содержаться в его теле?
поиск этого хэндла....
{RASkov} (2007-09-02 14:05:00) [3]> [4] Putnik © (02.09.07 12:32)
while Handle=0 do Application.ProcessMessage;
например:
while FindFindow('','')=0 do Application.ProcessMessage;
Ну и придумать аварийный выход из цикла
например так:
i=0;
while (Handle=0) and (i<1000) do begin
Application.ProcessMessage;
INC(i);
end;
еслиHandle=0 тогдаERROR;
Но лучше воспользоваться другими способами....
Virgo_Style (2007-09-02 12:42:00) [4]Думаю, можно. А в тело цикла, чтобы систему не грузить, поставить sleep с небольшим интервалом.
Или попробовать использовать WaitForInputIdle.
Честно говоря, я не очень-то компетентен в этих вопросах)
Putnik (2007-09-02 12:32:00) [5]2 Virgo_Style ©
Спасибо. Все именно из-за того, что окно не успевало создаваться.
Тогда еще вопрос. Можно вместо sleep'a использовать цикл, условием выхода из которого, будет являтся ненулевой handle этого диалогового окна? И если можно, что должно содержаться в его теле?
Virgo_Style (2007-09-01 18:59:00) [6]Putnik © (01.09.07 10:39)
при выполнении пошагово f8 из среды разработки все выполняется как и задумывалось
А если между посылкой сообщений поставить sleep'ы? Быть может, диалоговое окно не успевает создаться и "его" сообщения уходят в пустоту? Конечно, окончательное решение не должно базироваться на sleep'ах, но для проверки сойдет, я думаю.
Putnik (2007-09-01 14:11:00) [7]ya ge ne nastol'ko himik:)
palva (2007-09-01 10:47:00) [8]Ну наверно, сообщения нужно посылать не диалоговому окну, а полю ввода на этом окне.
> я не программист, а химик
О! Самогон, наркотик, гексоген.