Хуки. Локальные и глобальные.

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Re: Хуки. Локальные и глобальные.

Сообщение MysticCoder » 22.03.2016 18:53:03

Запускай от админа и будет тебе счастье. Или как товарищ предлагал выше UAC отключи. Не знаю правда где и как) Вроде ведь пришли к выводу, что из за прав. Ну или скомпиль это дело все под дельфой. Не знаю в чем дело, но под ней у меня по крайней мере не зависали приложения. Может хуки просто не устанавливались по тихому, но не зависали. а ставить хуки надо по первому варианту.
По поводу как оно работает почитай в мсдн, там вроде на уровне драйвера система вызывает ловушку как надо. Так шо по идее длл не обязательна.
Журнальный хук все таки изучи. длл там не надо, а значит не будет плясок с зависаниями как сейчас. главное правильно разобрать данные и сразу перевести нужные сообщения в локализованные символы.
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: Хуки. Локальные и глобальные.

Сообщение CynicRus » 25.03.2016 11:54:12

https://github.com/MahdiSafsafi/delphi-detours-library - а ещё можно вот такую штуку использовать, ловит всё. Таким макаром, я даже DirectX хукал.
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Хуки. Локальные и глобальные.

Сообщение Leonius_Bad » 27.03.2016 13:33:15

MysticCoder писал(а):Запускай от админа и будет тебе счастье.

Нету счастья..к несчастью..=)
Что от админа, что нет.
Делал по феншую (на сайте мелкософта так написано же! Ну..):
два комплекта, 32 битный и 64 битный. Библиотеки называются по-разному. Даже процедуры на всякий случай назвал по-разному, несложно.
Добавил взятие дескриптора для КаллНекст (ибо, а вдруг таки нужно?). Каждый комплект пишет в свой файл и потом берет дескриптор именно своей хуки (проверил).

И ничего... На мелкософтном сайте было что-то про порядок установки хук. Но тут всего два варианта и никакой разницы порядок запуска не несёт.
При обоих поставленных хуках зависает вообще всё: и 32 битные софтинки и 64 битные..

Поднадоело пока что. Начинаю пробовать иные варианты. Если кто-то данную проблему с WH_KEYBOARD одолеет - дайте, пожалуйста знать, мне дико любопытно... Как же оно всё же должно работать, если вообще должно... :) Исходники для тестов даже дам: https://yadi.sk/d/_pL-XLmPqWKo6

MysticCoder писал(а):Ну или скомпиль это дело все под дельфой.

Не люблю дельфю..С вуза не люблю) Но попробовать- попробую, под какой версией лучше?
Журнальные хуки и ЛоуЛевел изучу и отпишусь сюда же. Спасибо Вам за помощь и терпение. Я еще вернусь :D

CynicRus писал(а):https://github.com/MahdiSafsafi/delphi-detours-library - а ещё можно вот такую штуку использовать, ловит всё. Таким макаром, я даже DirectX хукал.

О...выглядит любопытно. Спасибо! И это поковыряю)
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Хуки. Локальные и глобальные.

Сообщение CynicRus » 27.03.2016 23:34:11

Ну хук на клавиатуру и мышь, когда мне надо было - я делал вот так: https://github.com/CynicRus/SMR/blob/master/smr_win_hook.pas и всё работает как часы, без каких либо DLL.
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Хуки. Локальные и глобальные.

Сообщение Leonius_Bad » 28.03.2016 18:37:04

CynicRus писал(а):Ну хук на клавиатуру и мышь, когда мне надо было - я делал вот так


Благодарю, довольно подробный пример! :)
Пока нет времени проверить все эти альтернативные варианты, но уже скоро)

Как бы там не было, мне всё равно очень любопытно знать, как же оно должно работать с обычным WH_KEYBOARD в 64 битных осях? Ведь должно же.. Или не должно?
Можно просто обвинить винду в кривизне и успокоится :D Но нннет.. Эта беда не даст мне спать по ночам. :|
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Хуки. Локальные и глобальные.

Сообщение CynicRus » 30.03.2016 10:23:33

Leonius_Bad писал(а):Как бы там не было, мне всё равно очень любопытно знать, как же оно должно работать с обычным WH_KEYBOARD в 64 битных осях? Ведь должно же.. Или не должно?


Ну - приведённый мной выше код работает и на x64 и на x32 платформах:)
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Хуки. Локальные и глобальные.

Сообщение Leonius_Bad » 30.03.2016 17:43:34

CynicRus писал(а):Ну - приведённый мной выше код работает и на x64 и на x32 платформах:)

Вы используете WH_<>_LL, которое без dll работает.

Кстати, это, как я понял, только модуль с методами\функциями, да? В самом приложении у Вас что? Предполагаю, что цикл приема сообщений (message loop) c TranslateMessage и DispatchMessage, как тут упоминалось ранее.
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Хуки. Локальные и глобальные.

Сообщение Leonius_Bad » 02.04.2016 15:12:31

Пока что доволен WH_KEYBOARD_LL. Всё оказалось значительно проще и работает везде (по крайней мере - пока).
Сделал как и писалось выше (приложение консольное):
Код: Выделить всё
//Установка хука
KeyHook:=SetWindowsHookEx(13, @KeyBoardHook, Integer(HInstance), 0);
//KeyBoardHook -функция-фильтр, находится прямо в коде программы

//Message loop
while  true do
begin
  if GetMessage(Msg, 0 , 0, 0) then //Если делать PeekMessage - заметно грузит проц
     begin
       TranslateMessage(Msg);
       DispatchMessage(Msg);
     end;
end;
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Хуки. Локальные и глобальные.

Сообщение mirk » 07.04.2016 22:29:23

Делаю из примера
Код: Выделить всё
kHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);

Но получаю ошибку
Error: Wrong number of parameters specified for call to "LowLevelKeyboardProc"

Смотрю объявление - там ровно 4 параметра принимается.
В чем может быть проблема?
mirk
постоялец
 
Сообщения: 317
Зарегистрирован: 24.09.2007 10:03:39

Re: Хуки. Локальные и глобальные.

Сообщение CynicRus » 07.04.2016 23:06:05

Код: Выделить всё
@LowLevelKeyboardProc
, второй параметр просит не функцию, а указатель на функцию.

Ну или
Код: Выделить всё
{$ifdef fpc}
  {$mode delphi}
{$endif}


вместо {$mode objfpc}.
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Пред.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru