Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2007, 21:30   #1
Maniak
Новичок
Джуниор
 
Регистрация: 25.12.2007
Сообщений: 2
По умолчанию CallNextHookEx - Hook

как сделать так что б когда я отлавливаю клавишу (из ддл-ки хуком) - перекрыть эту клавишу, т.е. что бы выполнялась не системная функция а моя?
Maniak вне форума Ответить с цитированием
Старый 26.12.2007, 22:20   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

не передавать операционной системе дальнейшее управление...
Если DLL писали вы, то моя фраза вам польностью должна быть понятна, если нет, то вперед учить =)
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 26.12.2007, 23:16   #3
Maniak
Новичок
Джуниор
 
Регистрация: 25.12.2007
Сообщений: 2
По умолчанию

многозначительный ответ...
собственно это исходило даже из вопроса:
Цитата:
т.е. что бы выполнялась не системная функция а моя?
а есть еще вот такая вещь(выдрано из статьи "аспекты реализации hook"):
Цитата:
если вы работаете на Windows 2000, то вышеописанный пример будет работать иначе. Дело в том, что в Windows 2000 изменён механизм вызова ловушки, стоящей в очереди. Программисты Microsoft довели-таки его до ума, и в новой ОС он стал, по моему личному мнению, более логичен. В Windows 2000 если у вас имеется цепочка ловушек, то при выполнении функции CallNextHookEx(0, nCode, wParam, lParam ) вызывается следующая ловушка в цепочке, т.е. отпадает необходимость в передачи дескриптора, возвращаемого функцией SetWindowsHookEx. Таким образом, в первом примере будут вызываться обе ловушки и при клике на правую кнопку мыши вы увидите сообщение "HOOK2 working !", а затем и "HOOK1 working !". Рассмотрев и опробовав пример 2, вы увидите, что в Windows 2000 оба примера работают одинаково, хотя второй пример гораздо более сложен в плане реализации. Так как мы стремимся к тому, что бы наши программы были устойчивы в работе под любой версией Windows (имеются ввиду 32-х разрядные и выше), то в связи с этим я бы рекомендовал в ваших программах использовать метод, описанный далее в статье, а ещё лучше - делать проверку на ОС, под которой была запущена ваша программа и соответствующим образом работать с ловушками. К сожалению у меня нет описания, содержащего декларацию "новой" функции CallNextHookEx(), нововведение было обнаружено мной в результате тестирования своих программ на Windows 2000, поэтому возможны какие-то нюансы при работе с этой функцией. Лично я, работая с ловушками в среде Windows 2000, на другие изменения не натыкался, если кто-то располагает какой-либо интересной информацией по данному вопросу - буду признателен, если со мной ею поделятся.
Вразумительный ответ ктонибудь даст?
Maniak вне форума Ответить с цитированием
Старый 27.12.2007, 08:44   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Собственно в статье и есть ответ на ваш вопрос.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 27.12.2007, 19:58   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

суть в том что при реализации хуков, наша DLL грузится во все процессы, и требуется что бы во всех копиях нашей DLL в переменной содержащей хендл ловушки был верный хендл, чтобы вызвать CallNextHookEx. И по словам автора той статьи в системах WinNT не требуется извращаться что бы во всех процессах был верный хендл. Но я бы не стал так утверждать...

Последний раз редактировалось rpy3uH; 27.12.2007 в 20:01.
rpy3uH вне форума Ответить с цитированием
Старый 29.12.2007, 14:22   #6
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

Цитата:
Но я бы не стал так утверждать...
В MSDN недвусмысленно написано, что первый параметр CallNextHookEx на NT игнорируется...


Код:
LRESULT CallNextHookEx(      
    HHOOK hhk,
    int nCode,
    WPARAM wParam,
    LPARAM lParam
);

http://msdn2.microsoft.com/en-us/lib...74(VS.85).aspx
Slovinsky вне форума Ответить с цитированием
Старый 30.12.2007, 14:23   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Slovinsky Посмотреть сообщение
В MSDN недвусмысленно написано, что первый параметр CallNextHookEx на NT игнорируется...

http://msdn2.microsoft.com/en-us/lib...74(VS.85).aspx
странно...

но почему тогда у меня не работает вот этот код
Код:
library hookDLL;

uses
  windows;

var
  HookHandle:  HHOOK = 0;

function SysMsgProc(CODE,WParam,LParam:DWORD):DWORD;stdcall;
begin
    CallNextHookEx(0,CODE,WParam,LParam);
end;

procedure SetHook(v:boolean);export;stdcall;
begin
 if v then
  begin
   HookHandle:=SetWindowsHookEx(WH_KEYBOARD,@SysMsgProc,HInstance,0);
  end
      else
  begin
   UnhookWindowsHookEx(HookHandle);
  end;
end;

exports
 SetHook;

begin

end.
когда ставишь хук блокируется клава, когда снимаешь всё нормально. Хотя по идее не должна блокироваться

P.S. может я дурак?

Последний раз редактировалось rpy3uH; 30.12.2007 в 14:45.
rpy3uH вне форума Ответить с цитированием
Старый 30.12.2007, 17:20   #8
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

rpy3uH, ты забыл Result:=CallNextHookEx...
Slovinsky вне форума Ответить с цитированием
Старый 31.12.2007, 10:35   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

тьфу <censored> ...
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Hook на копирование. Dj_smart Win Api 4 26.05.2008 00:22
Хук (hook) на клавиатуру eoln Win Api 17 03.05.2008 18:35
hook в dll? Altera Win Api 3 09.03.2008 09:54
Hook... Roof Общие вопросы Delphi 5 06.11.2007 16:25
Hook off? Сильванович Михаил Win Api 1 03.04.2007 16:25