![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват открытия и закрытия приложения....
Vasily Terekhov © (2002-11-14 12:21:00)Привет,
ставлю WH_CBT хук. Хочу отловить открытие или закрытие оконного приложения на HCBT_CREATEWND.
Но эток хук перехватывает создание всех окон...
А мне надо, только перехват создания главных окон приложения.
Кто нибудь сталкивался с таким?
kostik78ua (2002-11-14 18:03:00) [1]Поставь хук на WH_SHELL
code=HSHELL_WINDOWCREATED/HSHELL_WINDOWDESTROYED
Vasily Terekhov (2002-11-14 17:56:00) [2]:)))
замкнутый круг :)))
ладно, помучаю lpcs :))
Игорь Шевченко (2002-11-14 17:54:00) [3]Vasily Terekhov (14.11.02 17:40)
WS_VISIBLE в lpcs^.dwStyle :-)))
Vasily Terekhov (2002-11-14 17:40:00) [4]ок
спасибо
Но дело в том, что проверка на видимость окна, отсекает много ненужного, а когда WND приходит в этот хук, то окно еще не видимо :)))
Игорь Шевченко (2002-11-14 16:20:00) [5]Vasily Terekhov (14.11.02 16:12)
> не, не работает :(((
Выпрямитель нужон...
> а мне нужны только пользовательские приложения
В кладовке, в разделе готовые программы, лежит программа EnumFunctions. Там показано, чем окно пользовательского приложения отличается от других окон. Удачи!
Vasily Terekhov (2002-11-14 16:12:00) [6]не, не работает :(((
но не в этом деле, я могу стиль получить GetWindowLong
но тем не менее куча левых окон имеет стиль WS_OVERLAPPEDWINDOW или WS_OVERLAPPE
а мне нужны только пользовательские приложения
Игорь Шевченко (2002-11-14 15:40:00) [7]PCBTCreateWnd(lParam)^.lpcs^.dwStyle ?
Vasily Terekhov (2002-11-14 15:15:00) [8]в доке написано, что топ-левел окно меет Parent = 0 и Owner = 0 или имее стиль WS_OVERLAPPED
я делал проверки на Parent и Owner (через GetParemt и GetWindow(W,GW_OWNWR)), все равно вылезают левые окна, а стиль не могу проверить, т.к. не могу нормально считать струкруру, на которую указывает lParam :((
TCBTCreateWnd(Ptr(lParam)^).lpcs^.style
Игорь Шевченко (2002-11-14 15:11:00) [9]Vasily Terekhov (14.11.02 14:58)
До отладчика современная научная мысль не доросла ?
Song (2002-11-14 15:06:00) [10]Вот именно что GetParent()
Vasily Terekhov (2002-11-14 14:58:00) [11]Игорь Шевченко
У меня при обращении к lparam к lpcs структуре всегда какой-то эксептион:
Я что-то не так делаю?
TCBTCreateWnd(Ptr(lParam)^).lpcs^.lpszName
Игорь Шевченко (2002-11-14 14:47:00) [12]Vasily Terekhov (14.11.02 14:18)
У не левых окон нет стилей (чаще всего) WS_CHILD и WS_POPUP
Vasily Terekhov (2002-11-14 14:18:00) [13]Только тогда не GetParent, а GetWindow(Wnd, GW_OWNER);
Но деле в том, что все равно левые окна попадают в список :((
Song (2002-11-14 13:44:00) [14]Ну... Игорь, что я могу сказать.. только руками развести. Мой способ - тоже способ :-)
Игорь Шевченко (2002-11-14 13:40:00) [15]Song © (14.11.02 13:22)
Нафига GetParent ? В HookData передается CREATESTRUCT, оттуда и брать все, что надо. В том числе и стиль WS_OVERLAPPED, который определяет TopLevel окно или не TopLevel :-)
С уважением,
Song (2002-11-14 13:22:00) [16]На то он и глобальный хук :)
Проверяй в call-back ф-ии хука на принадлежность родителя окна к десктопу. Типа что-то того:
IF GetParent(Handle)=HWND_DeskTop then это_top_level_окно