Перехват системных сообщений когда программа неактивна

Горячие клавиши

Если вы решили написать более-менее серьезную программу, то вам обязательно придется столкнутся с такой проблемой с которой я столкнулся в свое время - перехват системных сообщений, когда ваша программа неактивна.
Для решения таких задач часто советуют писать dll, использовать хуки, но совсем недавно я открыл для себя принципиально новый подход - регистрация горячих клавиш.
Как и положено, чтобы получше разобраться давайте напишем программу, которая даже будучи неактивной, при нажатии на сочетание клавиш - выводит сообщение.

Начнем с того, что создадим новый проект :). Далее кинем на форму всего две кнопки (TButton) и TapplicationEvents(Вкладка Additional).
Одна кнопка будет включать горячие клавиши, а другая - отключать.
Для кнопки "Включить" напишем такой обработчик события:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
bool RHKret = RegisterHotKey(Form1->Handle, WM_HOTKEY, 0x00F, MOD_ALT + MOD_CONTROL, VK_RETURN);
 if (RHKret)
 {
    ShowMessage("Hot Key Registred");
} }

Для "Отключить" пишем следующее:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
UnregisterHotKey(Form1->Handle, 0x00F );
}
Для ApplicationEvents1 в обработчике события OnMessage пишем:

void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
if (Msg.message == WM_HOTKEY) 
        {
        if (Msg.wParam == 0x00F)
                {
                ShowMessage("http://devoid.com.ua");
                }
        }
}

Как видите код несложный и его немного, поэтому я его оставлю без подробного обьяснения :)

Информация о статье "Перехват системных сообщений когда программа неактивна"

Автор DeVoid | Сайт http://devoid.com.ua | Добавлена 26 Августа 2007 | Просмотрели 5005 раз

  • Digg it!
  • Delicious
  • +МоёМесто.ru
  • Добавить страницу к Мистеру Вонгу
  • Добавить страницу к Мистеру Вонгу

Комментарии КОММЕНТАРИИ

Комментариев еще нет.

Зарегистрируйтесь или выполните Вход для того чтобы оставлять комментарии