![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| BEST13 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 11.4.2008 Где: Ukraine Репутация: нет Всего: нет |
Нужно, отключить клаву, для этого использую DLL c хуком, взял код из DRKB. Только проблема в том что при запуске проекта, по F9 или по иконке, все вылазит окошко с инфой компиляции, пропадает и все проект как и не был запушен иконка снова активна.. если закомментирывать вызов процедуры, тогда все норм запускаться. Delphi на этот счет никаких предупреждений не выдает.
DLL:
А вот часть и проги:
Может в win7 как-то надо по другому с DLL работать? Или может, что в хуке не так? Спасибо, что потратили время на меня. |
||||
|
|||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Вопрос на засыпку: а почему она не должна закрываться? Там какая-то задержкау тебя, или что? а то в том коде что показал нету
-------------------- Обижено школьников: 8 |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
И в хуке тоже не так. Налицо непонимание принципов работы хуков.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| BEST13 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 11.4.2008 Где: Ukraine Репутация: нет Всего: нет |
Спасибо, что откликнулись!
А разве просто программа( с формой) должна, после запуска сразу закрываться? Как я выше и писал, если закомментирывать вызов процедур из ДЛЛ, то прога работает нормально(максимизируеться на весь экран). задержек, никаких нет. Поскольку без, вызова процедур из ДЛЛ все работает , ок.
Вы правы, наверно, это мое первое приложение с хуком. Я прочитал, статью про применении хуков из ДКРБ и статью про ДЛЛ, может я что-то и упустил. Я знаю, что вы мне ничем не обязаны, но был бы благодарен, если бы указали, что не так в хуке? Меня самого смущает, что в этом примере хука из ДКРБ, я вызываю процедуру, в других я примерах я видел только в основном функции. И поскольку я пишу ключевое слово stdcall, насколько означает, что библиотека написана по определенным правилам и может использоваться в программах с различными языками, к примеру С, а там процедур нет. Может в этом дело? |
||||
|
|||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Не уверен, что в DRKB написано. Вот вроде нормальный текст: http://www.delphimaster.ru/articles/hooks/index.html Ошибка в работе с CurrentHook. DLL грузится индивидуально в адресное пространство каждого процесса. Это значит, что CurrentHook равно нулю во всех экземплярах, кроме вашей программы. Типичное решение - вынос глобальных переменных в MMF. Впрочем, это не имеет значения в Windows XP (? не уверен) и выше - там изменено поведение функции CallNextHookEx: первый параметр игнорируется. Но об авторе кода этот факт говорит многое (###код). Что более важно (причина вылета) - несовпадение сигнатуры SetupGlobalKeyBoardHook и Unhook в DLL и .exe: разные модели вызова. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| BEST13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 11.4.2008 Где: Ukraine Репутация: нет Всего: нет |
CodeMonkey, Спасибо, за объяснения и помощь. В ДКРБ именно эта статья, и пример кода, прочитал её еще раз и закрепил знания. поправил вызов, все нормально запускается и работает.
Я конечно, еще плохо понимаю в этой теме, но зачем использовать MMF и запоминать дескриптор, если он все равно игнорируется и все прекрасно работает. Ведь получается мы напишем код, который, никакой пользы не принесет, ведь игнорируется и пустой и не пусто дескриптор. Поправите, если я что-то не то говорю. P.S. С какого и по какой код, нужно написать что бы отлавливать все клавиши включая комбинации, и каких обрабатывать что бы они не срабатывали? В нете не нашел, ничего подобного. Или стоит все таки, для этого вопроса создать отдельную тему? |
|||
|
||||
| CodeMonkey |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Чтобы код работал на старых системах.
Если интересуют только новые системы - то да, можно и не использовать MMF. Но тогда надо 0 передавать. А не CurrentHook.
Странный вопрос. "Как мне ограничить, чтобы ничего не ограничивать?" Вот ничего и не ограничивай. На уровне нажатия отдельных клавиш нет понятия "комбинация". F1:
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||||||
|
|||||||||
| BEST13 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 11.4.2008 Где: Ukraine Репутация: нет Всего: нет |
Спасибо,.за ответы и помощь. От меня +.
Ага, с этим понятно.
Честно, я не понял. О чем вы? Я такой фразы не писал. Значит, нет варианта через хук отключить комбинации клавиш (ALT+...,Ctrl+..., Shift+...)? Если я правильно понял, для того, что бы заблокировать клавиши мне достаточно, в результат функции возвращать любое не нулевое значение? И чтобы узнать что за клавиша, была нажата нужно функции параметр code записывать, как HC_ACTION, что бы в wParam и lParam содержалась инфа о клавише. А в wParam будет содержаться виртуальный код клавиши. Или если мне нужно , все клавиши просто возвращать результат функции не нулевой, и этого будет достаточно? |
||||
|
|||||
| BEST13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 11.4.2008 Где: Ukraine Репутация: нет Всего: нет |
Вопрос закрыт!
|
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |