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

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

особенности HOOK-ов в MDI приложениях [D6, Win95/98, WinME, Win2k, WinXP]


Dennisius ©   (2004-05-17 09:37:00) 

Здорово, здесь много было написано, сказано, про глобальные HOOK-и. Я сталкнулся вот с такой ситуацией. в MDI приложении
точнее в его DLL создается глобальный HOOK :


function Key_Hook(Code: integer; wParam: word; lParam: Longint): Longint; stdcall;
begin
 if Code >= 0 then
 begin
  if (lParam and $40000000 = 0) and (wParam=hide_key) then
   SendMessage(SC_H, wm_readkb, wParam, lParam);
  Result:=0;
 end
              else
 Result := CallNextHookEx(HookHandle,Code, wParam, lParam);
end;

procedure LocalExitProc; far;
begin
 if HookHandle<>0 then
 begin
   UnhookWindowsHookEx(HookHandle);
   ExitProc := SaveExitProc;
 end;
end;

procedure Init_Hook;
begin
HookHandle := SetWindowsHookEx(wh_Keyboard, @Key_Hook, HInstance, 0);
if (HookHandle <> 0) then
begin
 SaveExitProc := ExitProc;
 ExitProc := @LocalExitProc;
end;
end;


Но он перехватывает только wh_Keyboard только когда приложение
находится в Фокусе. Если фокус переходит на другое предложение
то Hook не пашет. Можете объяснить в чем дело. Заранее Спасибо


Dennisius   (2004-05-17 16:04:00) [1]


> потому что MDI-приложение - такое же равноправное GUI-приложение,
> как и все прочие GUI-приложения
>
> когда идет речь о глоб.хуках, то речь идет именно о GUI-приложениях
> ... а уж MDI или не MDI - совершенно индифферентно


> А какая разница, MDI или не MDI ?
> Вот, например, Spy++ является MDI приложением, а хуки там
> прекрасно работают


Я писал пару подобных програм и выше приведенный код взят из одной из них, где он прекрасно работает как глобальный HOOK,
в этом и весь прикол, программа обладала GUI интерфейсом.
Теперь я копирую этот код в MDI-приложение и он работает только как HOOK процесса этого приложения, поэтому то я и решил что вся проблема в MDI-технологии.
Если в нем есть ошибка прошу помочь её найти.


Digitman   (2004-05-17 11:26:00) [2]


> что то там нечего нету про MDI приложения


и не будет

потому что MDI-приложение - такое же равноправное GUI-приложение, как и все прочие GUI-приложения

когда идет речь о глоб.хуках, то речь идет именно о GUI-приложениях ... а уж MDI или не MDI - совершенно индифферентно


Игорь Шевченко   (2004-05-17 11:20:00) [3]

А какая разница, MDI или не MDI ?
Вот, например, Spy++ является MDI приложением, а хуки там прекрасно работают.


Dennisius   (2004-05-17 10:53:00) [4]

Просмотрел статью по реализации HOOK-сов что то там нечего нету про MDI приложения


Dennisius   (2004-05-17 10:49:00) [5]

-> Статью по хукам читал
На этом сайте нет, щас почитаем, только не говорите что
HOOK в MDI приложениях не пашет .....


Игорь Шевченко   (2004-05-17 10:22:00) [6]

Статью по хукам читал ?


Наверх

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