Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.30;
Скачать: 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 вся ветка

Текущий архив: 2002.12.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-99009
Alfred77777777
2002-12-10 19:53
2002.12.30
Валится ошибка


3-99029
Jdrm
2002-12-11 11:18
2002.12.30
Глюки с RecordCount


1-99187
Дмитрий К.К.
2002-12-17 09:30
2002.12.30
Свойства не по умолчанию


7-99375
sancho
2002-09-30 15:25
2002.12.30
Как узнать температуру винчестера?


14-99254
dxf
2002-12-11 11:20
2002.12.30
Никому не нужно чтение dxf?