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