![]() |
|
|
|
|
#1
|
|||
|
|||
|
Нахожу опр. Хендл потом 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
|
||||
|
||||
|
Цитата:
|
|
#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. |