|
Житель Земли
|
||||||||||||||||
Избитая тема о хуках07.03.2012, 17:45. Показов 8284. Ответов 21
Метки нет (Все метки)
нужно поставить хук на мышу. прочитал несколько умных статей о хуках.
написал ДЛЛ с хук-процедурой, для мониторинга хука посылаю сообщение WM_USER приложению-монитору. Вроде все по учебнику, так сказать. Но хук работает только когда курсор находится в пределах окна приложения, вызвавшего ДЛЛ с хук-процедурой. В чем трабл? с клавиатурным хуком (WH_KEYBOARD) та же фигня... код библиотеки
0
|
||||||||||||||||
| 07.03.2012, 17:45 | |
|
Ответы с готовыми решениями:
21
Избитая тема про StringGrid и числовую матрицу избитая тема кирилицы в qt Избитая тема Treeview |
|
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
|
|
| 07.03.2012, 17:56 | |
|
мож хендл десктопа отправлять
0
|
|
|
Житель Земли
|
||||||||
| 07.03.2012, 18:22 [ТС] | ||||||||
согласно умным словам, при установке хука третий параметр процедуры SetWindowsHookEx должен быть идентификатором библиотеки, в которой находится хук-процедура, четвертый параметр - ноль если хук ставится на всю систему. эти условия я соблюдаю, но хук работает только когда курсор над окном приложения-монитора. ![]() Добавлено через 2 минуты SetMouseHook(Handle); Handle я опраляю лишь для того, чтобы не искать его через FindWindow. На работу хука он не влияет Добавлено через 5 минут попутный вопрос
которая по сути есть запись (packed record). Так вот, как, зная адрес, обратиться к самой записи? Я в адресах немного путаюсь Добавлено через 10 минут вот сколько встречал статей о хуках, практически все являются копипастом и начинаются со слов
![]() Добавлено через 1 минуту Может, еще это имеет значение? использую D7 под WinXP Pro SP3.
0
|
||||||||
|
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
|
|
| 07.03.2012, 18:51 | |
|
через точку не пробовал?
0
|
|
|
Житель Земли
|
||||||||||||||||||
| 07.03.2012, 21:09 [ТС] | ||||||||||||||||||
|
lParam - это число типа DWORD. однако это число является адресом переменной (типа record) в памяти. Как обратиться к этой переменной? Добавлено через 1 час 56 минут я почти разобрался в вопросе, вот только последний ЖОСТКИЙ баг остался. итак, напомню, мне нужен доступ по адресу к структуре MOUSEHOOKSTRUCT
но! когда курсор находится НЕ над окном, происходит ACCESS VIOLATION Почему это происходит? если убрать все операторы из процедуры WMUser, никаких ошибок.
0
|
||||||||||||||||||
|
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
|
|
| 08.03.2012, 01:00 | |
|
а на кой тебе dll? если ты ставишь хук на мышь или клаву можно и без dll обойтись, воспользоваться так называемым LL хуком, принцип тот же только вместо WH_MOUSE нужно передать 14 (для клавы 13)
подробности в msdn
1
|
|
|
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
|
|
| 08.03.2012, 13:44 | |
|
если хук на мышь или клаву то можно и без dll обойтись, на остальные виды хуков нужна dll
1
|
|
|
Житель Земли
|
||
| 08.03.2012, 14:04 [ТС] | ||
|
0
|
||
|
Житель Земли
|
||
| 08.03.2012, 16:36 [ТС] | ||
|
Также решил проблему доступа к записи по адресу, когда хук работает в ДЛЛ. для этого в ДЛЛ создаю копию структуры, адрес которой передает хук-процедура, и уже указатель на эту копию передаю в приложение-монитор.
0
|
||
|
Житель Земли
|
||||||||||||||||||||||||
| 08.03.2012, 17:28 [ТС] | ||||||||||||||||||||||||
|
итак, привожу окончательный результат моих изысканий, может, кому пригодится. вариант с использованием ДЛЛ. код библиотеки
описание структуры здесь: MSLLHOOKSTRUCT structure в Делфи 7 она не описана, поэтому делаю сам
единственно, хук не ловит двойной щелчок, вместо этого происходит два одинарных, как быстро бы я ни клацал
0
|
||||||||||||||||||||||||
|
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
|
|
| 08.03.2012, 18:00 | |
|
зачем ты в dll используешь WH_MOUSE_LL ? если уж ты ставишь LL хук то dll тебе НЕ НУЖНА код пиши в своем exe, если уж ты делаешь с dll то тебе нужно передавать WH_MOUSE а не WH_MOUSE_LL
это первое. Второе, если ты ставишь глобальный хук правильнее нужно было бы использовать mmf (memory mapped files)
0
|
|
|
Житель Земли
|
|||
| 08.03.2012, 18:24 [ТС] | |||
|
в MSDN сказано
это первое. Второе. Объясни, почему мне нужно использовать mmf, а не так как я сделал. В чем преимущество?
0
|
|||
|
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
|
||
| 08.03.2012, 18:26 | ||
|
Ну это было бы правильно, если тебя устраивает свой код, тогда не заморачивайся.
0
|
||
|
Житель Земли
|
||
| 08.03.2012, 18:41 [ТС] | ||
|
Добавлено через 3 минуты пока единственная замеченная мной неприятность возникала, когда я пытался передать в ДЛЛ хэндл вызвавшего окна (см. мой первый пост). Теперь я понял, в чем была проблема (различные АП) Добавлено через 4 минуты если есть хорошая ссылка на MMF (кроме MSDN ) на русском, скинь.
0
|
||
|
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
|
|
| 22.12.2014, 11:56 | |
|
DenNik, Мне тоже нужен рабочий хук WH_LL_MOUSE, только делательно без dll-ки
0
|
|
|
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
|
||
| 06.01.2015, 18:42 | ||
|
DenNik,
У вас что нибудь получилось, то что вы делали в 13 посте? Удалась ли передача координат курсора в лейблы?
0
|
||
|
Житель Земли
|
||
| 06.01.2015, 18:58 [ТС] | ||
|
NIKOLAYY, хз ))))) давно это было. я делал это в качестве тренировки. судя по тому, что я привел окончательный вариант, наверное получилось.
установка хука - по нажатию кнопки, снятие - по нажатию другой и обязательно при закрытии приложения
0
|
||
| 06.01.2015, 18:58 | |
|
Помогаю со студенческими работами здесь
20
Избитая тема - перетаскивание формы Знаю что тема избитая но - ХП на ВИСТУ Восстановление после clean (избитая тема) Избитая тема про блокировку по условию Как сохранить string данные в DOC,PDF (избитая тема)? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|