Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
15-1223377264
desc
2008-10-07 15:01
2008.12.14
Автофигуры для MS Office


4-1201164271
apic
2008-01-24 11:44
2008.12.14
меню "пуск",


15-1223818673
Eraser
2008-10-12 17:37
2008.12.14
Как обойти баг в Delphi XML Documentation?


15-1223451509
DeadMeat
2008-10-08 11:38
2008.12.14
Data Explorer и MSAccess


4-1202209492
axiv
2008-02-05 14:04
2008.12.14
align на рабочем столе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский