Вниз
Скачать: CL | DM;

Перехват открытия и закрытия приложения....   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.022 c
1-99059
V-A-V
2002-12-19 13:37
2002.12.30
Создание документа Оффиса


14-99251
Сатир
2002-12-10 17:46
2002.12.30
Из милицейских протоколов


1-99109
korvet
2002-12-18 09:19
2002.12.30
Удобный редактор текста


3-99013
boozer
2002-12-10 11:48
2002.12.30
Теперь проблема с DBEdit, DBLabel и им подобным


3-98967
epifansan
2002-12-10 08:45
2002.12.30
Подскажите как обойтись без регистрации своих баз в БД




   Наверх