|
|
#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. |