![]() |
|
|
#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. |
|
#7
|
||||
|
||||
|
Повторюсь, какую цель вы преследуете? Что хотите получить? Какие данные подаются на вход?
|
|
#8
|
|||
|
|||
|
Я пытаюсь найти приемник для отправки Ему WM_Command. я его нахожу кодом выше, но мне нужно знать, что я могу отправить и приемник существует. Если нет - найти новый.
Из всего выше указано, выходит, что приемник это таки окно.... |
|
#9
|
||||
|
||||
|
Насколько я знаю (могу ошибаться, не вникал столь подробно в дебри) сообщение может получать окно или поток (имея цикл приема и обработки сообщений). Поток без окна может принять в свою очередь только одно сообщение за раз, а окно имеет очередь.
Раз уж Вы отправляете сообщение (и видимо, оно "получается" и обрабатывается) то вы скорее всего имеете дело с окном. Тогда Вам достаточно будет проверить IsWindow. Если же все-таки окна нет, то тут надо смотреть по ситуации. Поэтому я и прошу у Вас больше входных данных. |
| Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
nixon232 (13.05.2018)
| ||
|
#10
|
|||
|
|||
|
Согласен с вами, подпись в очередной оказалась в точку.
IsWindow Возвращало всегда False Вот я и подумал, что это не окно. Взял вариант через HDC и все решилось. |
| Этот пользователь сказал Спасибо nixon232 за это полезное сообщение: | ||
dr. F.I.N. (13.05.2018)
| ||
|
#11
|
||||
|
||||
|
Вот из-за Вас полез разбираться
![]() Цитата:
![]() |
| Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
nixon232 (13.05.2018)
| ||