0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
|||||||||||
1 | |||||||||||
Системный хук на мышь06.06.2011, 22:47. Показов 2710. Ответов 8
Метки нет (Все метки)
Здравствуйте!
Помогите, пожалуйста, разобраться. Возникла задача написать программу, которая перехватывала бы системные сообщения от мыши и записывала б их в файл. Часть программы написал, но напоролся на проблему, которую решить никак не получается. Код основной программы:
Код dll:
Как есть - не могу правильно организовать цикл - у меня либо просто передаётся упраление в dll и управление обратно возвращается не долждавшись хука; либо передаётся управление в dll, но обратно не возвращается управление. Как быть, как правильно организовать передачу упраления? Помогите, кто чем может)) Заранее спасибо) Добавлено через 23 часа 2 минуты Неужели никто не знает, или просто лень?)))
0
|
06.06.2011, 22:47 | |
Ответы с готовыми решениями:
8
Хук на мышь из неглавного потока Глобальный Хук на Мышь Не ставится глобальный хук на мышь Простой глобальный хук на мышь |
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
|
|
08.06.2011, 17:42 | 2 |
Такой вопрос: а зачем тебе цикл обработки сообщений в dll? Если твой хук успешно прицепился к системе, то вся обработка сообщений, относящаяся к выбранному хуку происходит через функцию, которою ты указал в вызове SetWindowsHookEx. В твоем случае - WH_HookMouse().
0
|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
|
08.06.2011, 23:16 [ТС] | 3 |
я такие цмклы видел в примерах - что б dll в памяти весела. А тут ещё проблема выяснилась - почему-то не ципляется к системе. Но вот тут мне совсем не помятно почему.
0
|
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
|
|
08.06.2011, 23:47 | 4 |
DLL будет висеть в памяти, пока ты её не выгрузишь командой FreeLibrary() в твоем случае). А в чем выражается тот факт, что хук не в системе?
1
|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
|
09.06.2011, 00:04 [ТС] | 5 |
Спасибо за подсказку с освобождением dll. У меня не понимаю тогда - хук будет висеть всегда в памяти и ловить все сообщения от мыши или это разавая процедура будет?
Я из основной программы подгружаю dll, в функции MouseHookFunction ставлю хук на мышь и двигаю мышью. По моей логике, должен сработать хук, управление должно перейти в LRESULT CALLBACK WH_HookMouse, там изменить значение n_st.n1 с 0.000000 на 0.111100. Далее я вызываю структуру n_st из основной программы и вывожу в консоль значение n_st.n1. И оно равно 0.000000.
0
|
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
|
|
09.06.2011, 00:50 | 6 |
Ну всегда он висеть не будет. Вообще лучше создать отдельную функцию в dll, которая снимает функцию-фильтр ( у тебя фильтр - LRESULT CALLBACK WH_HookMouse) с хука и вызывать её либо планово в dll либо в случае что что-то не сработало уже в основной проге. А вообще для проверки как работает сам хук лучше сделай чтобы он возвращал не структуру, а скажем какой-нибудь флаг типа BOOL и проверяя TRUE и FALSE выяснить, что именно работает не так.
0
|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
||||||
12.06.2011, 17:34 [ТС] | 7 | |||||
Спасибо, вроде бы разобрался.
Но возник другой вопрос - написал вот такой код
0
|
1 / 1 / 0
Регистрация: 26.07.2009
Сообщений: 15
|
|
15.06.2011, 21:58 | 8 |
Я недавно много экспериментировал с возможностью вывода действий хука. Так вот, в функции обработки хука лучше не записывать данные в файл, ибо когда ты цепляешь WH_GETMESSAGE, то длл многократно вызывает её, а запись в файл С-ными функциями происходит путем открытия файловых дескрипторов и без доп. синхронизации в лучшем случае у тебя просто не добавится инфа в файл. Передача сообщений окну из длл - честно выше моего понимания как это сделать, если только хук не цепляется к основному приложению. В общем, самый демократичный вариант - создание консоли из длл (AllocConsole) и простой вывод нужных данных.
0
|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
|
15.06.2011, 22:28 [ТС] | 9 |
с этим ещё поразбираюсь. Но вот ещё проблема, которой вроде бы не должно быть - какие-то координаты странные: координата х, например, 64365, а y=70.
0
|
15.06.2011, 22:28 | |
15.06.2011, 22:28 | |
Помогаю со студенческими работами здесь
9
Дополнить глобальный хук на мышь Глобальный хук на клавиатуру и мышь без dll Глобальный хук на мышь - нужен наглядный пример Продам Компьютер (системный блок, монитор, мышь, клавиатура) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |