Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


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_окно


Наверх

Титульная страница Поиск, карта сайта Написать письмо