C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
"Горячие клавиши", но не совсем...
BreakPointMAN
Отправлено: 03.08.2005, 02:29


Станционный диспетчер

Группа: Участник
Сообщений: 86



Вообщем, встала такая проблема:
нужно отлавливать нажатия клавиш и их комбинаций (типа Ctrl+Alt+A или Alt+Shift+R или Alt+N или что-то в этом роде), когда приложение запущено, но не активно, и главная форма не в фокусе... ииии... потом как-то на эти нажатия реагировать... краем уха слышал что-то о хуках, что ставить винде надо...

Кто знает — если не трудно — киньте в меня ссылкой по этой теме или вкратце опишите, как сие на C++ Builder делается. smile.gif
** avtoritet
Отправлено: 03.08.2005, 02:47


Не зарегистрирован







Уверая тебя, заглянишь в google и найдешь там себе вполне исчерывающий ответ сам!
Иногда это называют сисетмными ловушками.
olegenty
Отправлено: 03.08.2005, 07:23


Ветеран

Группа: Модератор
Сообщений: 2412



иногда-то называется, но искать лучше не в гугле, а тут и на xportal.ru по слову HOOK
Vlad
Отправлено: 03.08.2005, 07:42


Машинист паровоза

Группа: Участник
Сообщений: 231



Используй RegisterHotKey(

HWND hWnd, // window to receive hot-key notification
int id, // identifier of hot key
UINT fsModifiers, // key-modifier flags
UINT vk // virtual-key code
); и обязательно UnregisterHotKey, плюс напишешь обработчик на событие, ни чего сложного.
Konstantine
Отправлено: 03.08.2005, 07:52


Мастер участка

Группа: Модератор
Сообщений: 545



Для того чтоб хук когда форма неактивна — его нужно делать через DLL
Vlad
Отправлено: 03.08.2005, 08:24


Машинист паровоза

Группа: Участник
Сообщений: 231



Это не хук! И DLL делать НЕ НАДО![
QUOTE
нужно отлавливать нажатия клавиш и их комбинаций (типа Ctrl+Alt+A или Alt+Shift+R или Alt+N или что-то в этом роде), когда приложение запущено, но не активно, и главная форма не в фокусе... ииии...
Человек не просит сказать как сделать хук. В данном случае это hotkey. На приложение можно повесить кучу хоткеев, и если оно запущено и нажата необходимая комбинация, приложение будет делать что вы заложили в логике программы.
QUOTE
Windows provides a set of functions that applications can use to define hot keys. A hot key is a key combination that generates a WM_HOTKEY message, a message the system places at the top of a thread's message queue, bypassing any existing messages in the queue. Applications use hot keys to obtain high-priority keyboard input from the user. For example, by defining a hot key consisting of the CTRL+C key combination, an application can allow the user to cancel a lengthy operation.

To define a hot key, an application calls the RegisterHotKey function, specifying the combination of keys that generates the WM_HOTKEY message, the handle of the window to receive the message, and the identifier of the hot key. When the user presses the hot key, a WM_HOTKEY message is placed in the message queue of the thread that created the given window. The wParam parameter of the message contains the identifier of the hot key. The application can define multiple hot keys for a thread, but each hot key in the thread must have a unique identifier. Before the application terminates, it should use the UnregisterHotKey function to destroy the hot key.

Попробуйте и увидите сами. Если же писать хук, то да лучше написать как положено DLL, хотя возможны извращения и без написания DLL
Вот некоторые ссылки про хуки:http://www.rsdn.ru/article/baseserv/hookdll.xml, http://www.rsdn.ru/article/baseserv/HookTo.../article/view/7 теперь статейка про хоткей http://www.realcoding.net/article/view/1848
BreakPointMAN
Отправлено: 03.08.2005, 17:54


Станционный диспетчер

Группа: Участник
Сообщений: 86



Спасибочки, глянем!.. smile.gif

Вернуться в Вопросы программирования в C++Builder