![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проверка существования окна с определенным хендлом [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 - макс. время ожидания.