| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Перехват нажатия клавиши Win |
| Автор: mr.Anderson 18.3.2007, 11:07 |
| Нужно запретить вызов панели Пуска, пока программа запущена. Т.е. до панели добраться "вручную" невозможно, об этом я уже позаботился. Остался только один метод ее вызова - это нажатие юзером кнопки Win. Как можно и этот метод убрать? |
| Автор: ama_kid 18.3.2007, 11:26 | ||
проблема стара, как мир... Его еще можно вызвать по Ctrl+Esc...
|
| Автор: mr.Anderson 18.3.2007, 14:52 |
| ama_kid, два вопроса. 1. При компиляции - ошибка "неизвестный символ hHook". Он и впрямь неизвестный, мы же его не объявляли? 2. Что значит "при запуске программы" ? В OnCreate формы? или как? |
| Автор: mr.Anderson 18.3.2007, 15:13 | ||||
| Сам же и отвечаю. Ошибку hHook исправляем простым стиранием этого присваивания. То есть вместо
Пишем так:
А насчет, где это писать - да, надо писать в OnCreate формы. Лучше в самом начале этого обработчика, если у вас там еще какой-нить код есть, имхо. ama_kid, браво! Код мне не очень понятен, но у него есть три неоспоримых достоинства: 1. Безо всяких DLL. А то говорят, что без них никак. 2. Работает в любой системе (ну, в Windows, по крайней мере, точно). 3. Это превосходно и безотказно работает. Огромное вам спасибо! От меня плюс в репутацию. |
| Автор: ama_kid 18.3.2007, 18:10 | ||||
| mr.Anderson hHook - это значение, возвращаемое функцией SetWindowHookEx - фактически этой указатель на предыдущую функцию в цепочке хуков... Исправить удалением, конечно, в данном случае можно, но вообще правильней это значение (типа HHOOK) использовать в строке 32 моего кода
тем самым мы передаем управление другой программе в цепочке, которая, возможно, повесила хук на клавиатуру... И еще - при выходе из программы желательно делать
Этим мы снимаем с клавиатуры низкоуровневый хук, что является хорошей практикой. Здесь тоже нужен этот hHook... Вообще, для того, чтобы повесить глобальный хук в системе - это обязательно делать через Dll, но для клавиатуры был введен специальный глобальный хук WH_KEYBOARD_LL (LowLevel), который можно вешать в своем процессе. Низкоуровневые хуки можно вешать на клавиатуру и мышь (WH_MOUSE_LL). |
| Автор: MuForum 31.8.2007, 20:58 |
| #for all - Метод конечно обалденный, мне самому очень понравился, автору респект! # for ama_kid |