|
#1
|
|||
|
|||
HandleExist
Нахожу опр. Хендл потом Pid. Все хорошо, но как определить, что Handle|pid еще существует (без повторного перебора) Было бы это окно, можно IsWindow, а если нет?
|
#2
|
|||
|
|||
Для процессов придется переоткрывать все таки
Последний раз редактировалось Zorkov Igor, 13.05.2018 в 10:22. |
Этот пользователь сказал Спасибо Zorkov Igor за это полезное сообщение: | ||
nixon232 (13.05.2018)
|
#3
|
|||
|
|||
Для окна можно так
Код:
function IsValidWndHandle(HandleValue: THandle): BOOL; var FDC: HDC; begin Result := False; FDC := GetDC(HandleValue); if FDC = 0 then Exit; ReleaseDC(HandleValue, FDC); Result := True; end; |
#4
|
|||
|
|||
Для окна можно по по сути любую Апишную ф-ю вызвать, которая работает с окном и смотреть, что вернет, а вот как быть без окна?
|
#5
|
||||
|
||||
Цитата:
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#6
|
|||
|
|||
внутри EnumWindows имеем нечто вроде
Код:
GetWindowThreadProcessId(h, @Pid); if СlassName = 'NeedClass' then if Pid = LParam then if NeedHwnd= 0 then NeedHwnd:= h; В этом случае нужно просто сбросить NeedHWD:=0 вот как это сделать лучше, я не понимаю. Не хочется в цикле всегда проверять корректный хендл Таких классов несколько, поэтому проверяю еще пид. upd. Сейчас подумал, что если я нахожу нужный Handle EnumWindows, это это автоматически окно? Последний раз редактировалось nixon232, 13.05.2018 в 15:09. |
#7
|
||||
|
||||
Повторюсь, какую цель вы преследуете? Что хотите получить? Какие данные подаются на вход?
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#8
|
|||
|
|||
Я пытаюсь найти приемник для отправки Ему WM_Command. я его нахожу кодом выше, но мне нужно знать, что я могу отправить и приемник существует. Если нет - найти новый.
Из всего выше указано, выходит, что приемник это таки окно.... |
#9
|
||||
|
||||
Насколько я знаю (могу ошибаться, не вникал столь подробно в дебри) сообщение может получать окно или поток (имея цикл приема и обработки сообщений). Поток без окна может принять в свою очередь только одно сообщение за раз, а окно имеет очередь.
Раз уж Вы отправляете сообщение (и видимо, оно "получается" и обрабатывается) то вы скорее всего имеете дело с окном. Тогда Вам достаточно будет проверить IsWindow. Если же все-таки окна нет, то тут надо смотреть по ситуации. Поэтому я и прошу у Вас больше входных данных. Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
nixon232 (13.05.2018)
|
#10
|
|||
|
|||
Согласен с вами, подпись в очередной оказалась в точку.
IsWindow Возвращало всегда False Вот я и подумал, что это не окно. Взял вариант через HDC и все решилось. |
Этот пользователь сказал Спасибо nixon232 за это полезное сообщение: | ||
dr. F.I.N. (13.05.2018)
|
#11
|
||||
|
||||
Вот из-за Вас полез разбираться
Цитата:
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
nixon232 (13.05.2018)
|