![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
![]()
Доброго времени суток. Недавно товарищ: ZaRDaK посоветовал мне использовать локальные хуки в программе (за что ему огромное спасибо).
Его решение моей проблемы работало прекрасно до тех пор, пока я не начал переносить код в класс. В общем суть проблемы такова: В качестве тестового примера делаю так: Код:
Код:
[Error] Unit1.pas(39): Variable required с указанием на @KeyBoardHook Причем эта же самая функция вне класса работает превосходно... Собственно вопрос очевиден: можно ли это исправить? З.Ы. В архиве лежит тестовый исходник Заранее спасибо.
Искусственный интеллект - фигня по сравнению с естественной глупостью
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 197
|
![]()
--------
А если подумать? Код:
Заносиш в класс function KeyBoardHook(code: integer; wParam: word; lParam: longword): longword; stdcall; пишешь обработчик как function <имя_класса>.KeyBoardHook(code: integer; wParam: word; lParam: longword): longword; begin ... end; CurrentHook:=setwindowshookex(WH_KE YBOARD,@,0,GetCurrentThreadID()); меняешь на CurrentHook:=setwindowshookex(WH_KE YBOARD,@<имя_класса>.KeyBoardHook,0 ,GetCurrentThreadID()); Последний раз редактировалось ZaRDaK; 23.07.2010 в 00:10. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
![]()
Да в том-то и весь прикол, что я так пробовал делать... Ошибка не пропадает...
Искусственный интеллект - фигня по сравнению с естественной глупостью
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
![]()
Код скомпилировался, но работать отказывается.
Код:
процедуры MeKeyBoardHook
Искусственный интеллект - фигня по сравнению с естественной глупостью
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
![]()
FCurrentHook:=SetWindowsHookEX(WH_K EYBOARD,Pointer(@TForm1.MyKeyBoardH ook),0,GetCurrentThreadID());
Картина не поменялась А так: FCurrentHook:=SetWindowsHookEX(WH_K EYBOARD,Pointer(TForm1.MyKeyBoardHo ok),0,GetCurrentThreadID()); [Error] Unit1.pas(97): Not enough actual parameters
Искусственный интеллект - фигня по сравнению с естественной глупостью
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
![]()
Ну да. SetWindowsHookEX требует указатель на процедуру фильтра (hook)
Искусственный интеллект - фигня по сравнению с естественной глупостью
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
![]()
Тема все еще актуальна. Гугл скоро будет узнавать меня по запросам(((
Вот в чем суть: Если я выношу функцию: KeyBoardHook за пределы класса - все работает превосходно, но я тогда не могу из нее работать с методами моего компонента (отпадает вся суть создания компонента) Если я заношу функцию: KeyBoardHook в класс (см. пример ниже) то: 1. Компиляция проходит успешно 2. После помещения компонента на форму и нажатия любой клавиши вылетает не только мое приложение, но и вся среда delphi. Вот тестовый код компонента: Красным выделены проблемные места. Код:
Искусственный интеллект - фигня по сравнению с естественной глупостью
Последний раз редактировалось Impuls1989; 26.07.2010 в 23:53. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хуки, проблема взятия адреса | qwerc1 | Win Api | 2 | 16.06.2010 00:33 |
Хуки в Windows | JeyKip | Win Api | 11 | 09.05.2010 00:33 |
Программа, использующая хуки | anGeee | Win Api | 1 | 11.12.2009 20:59 |
ListView и хуки | 7KByte | Win Api | 0 | 10.07.2009 22:21 |
Глобальные хуки | Zeraim | Win Api | 2 | 24.05.2008 16:00 |