Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проверка существования окна с определенным хендлом [D6, XP]


Mr tray ©   (2006-05-27 01:03:00) 

мне надо послать сообщение в окно, хендл которого у меня есть. если это окно существует, то оно пошлет сообщение на первое окно, тем самым поддверждая своё существование. но оно может и не существовать. я организовал этот механизм, используя postmessage. но с момента посылки проверочного сообщения от первого окна второму до принятия подтверждающего сообщение может пройти некоторое время, что для меня недопустимо (так как в зависимости от результата проверки нужно выполнять определенный код). как мне сделать функцию, которая выглядит примерно так
function checkform(wnd:hwnd;timeout:cardinal):boolean;
где wnd - хендл окна, которое может существовать, а может и не существовать, timeout - предел ожидания ответа, result - итог (был ли получен ответ).


Mr tray   (2006-05-27 18:09:00) [1]

Rial ©   (27.05.06 01:23) [1]
спасибо, кажется я вас понял....


Mr tray   (2006-05-27 18:05:00) [2]

Дело в том, что может быть, объект с данным мне хендлом и может являться окном, да только не искомым. чтобы определить, искомое ли окно обладает имеющимся у меня хендлом, я посылаю сигнал. получу ответ - значит есть контакт, не получу - не контакта.


Rial   (2006-05-27 15:44:00) [3]

ИМХО, спрашивалось именно про ожидание в течение некорого времени
после посылки сообщения. Вполне реальная проблема,
в которой IsWindow вовсе не при делах.
Просто чема вопроса и его содержание немного не совпадают.


begin...end   (2006-05-27 05:54:00) [4]

IsWindow -- оно не проще?


GanibalLector   (2006-05-27 01:45:00) [5]

Перед посылкой еще раз найди его : FindWindow,FindWindowEx


Rial   (2006-05-27 01:23:00) [6]

Используй
SendMessage.
Он ждет окончания передачи.

первая процедура - обработчик подтверждающего события.
С не, я думаю, все просто.
В ней делаем кроме всего прочего MyFalg:=True;

Перед посылкой сообщения клиенту
MyFlag:=False;

Теперь после отправки сообщения
N:=GetTickCount;
While (Not MyFlag)and(GetTickCount-N<MyConst)do begin
Sleep(5);
Application.ProcessMessages;
end;

Тут MyConst - макс. время ожидания.


Наверх

Титульная страница Поиск, карта сайта Написать письмо