Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.14;
Скачать: CL | DM;

Вниз

hook, CBTProc, HCBT_CREATEWND   Найти похожие ветки 

 
workbench   (2008-11-01 15:30) [0]

Здравствуйте, пытаюсь уствновить хук WH_CBT, хочу отловить открытие  чужого окошка, делаю вот так:

в dll-ке ставлю хук:

hAHook := SetWindowsHookEx(WH_CBT, @CBTProc, hInstance, 0);
if hAHook = 0 then // error

CBTProc выглядит вот так:

function CBTProc(code: integer; wParam: wParam; lParam: lParam): longint; stdcall;
begin
 // fWnd - это заголовок нужного мне окна
 if code = HCBT_CREATEWND then
   if StrPas(TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName) = fWnd then
     begin
     MessageBox(0, PChar(TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName),
       PChar("dll msg, lpszName"), mb_ok or mb_iconinformation)
   end;
 // Result := 0
 Result := CallNextHookEx(hAHook {Win2000}, code, wParam, lParam)
end;

сам хук вроде срабатывает, появляется окошко "dll msg, lpszName", только при закрытие оно вновь появляется, и так до бесконечности стреляет этими окошками, что я делаю неправильно при установке хука?


 
Сергей М. ©   (2008-11-01 15:50) [1]

А текст сообщения в этих окошках один и тот же и соответствует ожидаемому тобой ?


 
lead-in   (2008-11-01 16:01) [2]

да, так это приложение тестовое, то здесь я пытаюсь отловить мною же созданное окно


 
workbench   (2008-11-01 16:10) [3]

На сайте королевства нашёл вводную статью про хуки, там же было неск. примеров, думал что косячу где-то сам, но я пробовал прописывать этот в те самые примеры, результат тот же.

Вообще ещё не понятно что же должно быть результатом CBTProc, в SDK есть такое замечание:

"The value returned by the hook procedure determines whether Windows allows or prevents one of these operations" и далее вот это:

"For operations corresponding to the following CBT hook codes, the return value must be 0 to allow the operation, or 1 to prevent it:
HCBT_ACTIVATE
HCBT_CREATEWND
HCBT_DESTROYWND
HCBT_MINMAX
HCBT_MOVESIZE
HCBT_SETFOCUS
HCBT_SYSCOMMAND"

Пробовал я как Result ставить не CallNextHookEx(), результат опять-таки тот же(((


 
han_malign ©   (2008-11-01 16:17) [4]


> сам хук вроде срабатывает, появляется окошко "dll msg, lpszName"

...


 
Сергей М. ©   (2008-11-01 16:24) [5]


> мною же созданное окно


Уж не с именем ли "dll msg, lpszName" это окно ?)


 
workbench   (2008-11-01 16:37) [6]

dll msg, lpszName это просто caption окошка (не понимаю что в нём особенного), имя окна создание которого я пытаюсь отловить другое


 
workbench   (2008-11-01 16:38) [7]

dll msg, lpszName это просто caption окошка (не понимаю что в нём особенного), имя окна создание которого я пытаюсь отловить другое


 
workbench   (2008-11-01 16:48) [8]

Уфф... видимо все уже празднуют
Было б здорово получить всё-таки ответ на вопрос или совет.
С праздником всех, точнее с лишним выходным днём, если и есть что праздновать, так только это)))


 
Сергей М. ©   (2008-11-01 16:49) [9]


> не понимаю что в нём особенного


В том-то и дело что ничего в нем особенного - такое же равноценное окошко, как и все прочие.
И факт его создания в момент вызова тобой MessageBox точно так же приводит к вызову ф-ции CBTProc, как и при создании того самого тестового окошка, которое ты собственно "ловишь".

Др.вопрос - почему у тебя всегда истинно условие

TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName = fWnd

..

А истинным оно может быть в том числе и при условии, что

fWnd = ""

и

TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName = nil

которые, очевидно, как раз и имеют место быть в данной ситуации.


 
workbench   (2008-11-01 16:56) [10]

Сергей М.

да, вы пожалуй на 100% правы, а lpszName видимо действ nil, спасибо, думаю в выхи разберусь, щас уже кондиция не та)))



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.016 c
15-1223898497
Vlad Oshin
2008-10-13 15:48
2008.12.14
GPLS - что это за условие распостранения?


15-1223880444
Vlad Oshin
2008-10-13 10:47
2008.12.14
подскажите с приемом, что-то совсем затупил


15-1223603320
S2
2008-10-10 05:48
2008.12.14
Чтение поля сертификата


2-1225800533
newbie
2008-11-04 15:08
2008.12.14
таймер


2-1225458274
dmitry_12_08_73
2008-10-31 16:04
2008.12.14
Создание файла