Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12

Глобально перехватить нажатие сочитания клавиш

06.06.2012, 02:24. Показов 3077. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот нашол в интернете Как глобально перехватить нажатие клавиши или комбинации клавиш.

Для примера, перехватим комбинацию ALT + CONTROL + ENTER.

Сначала регистрируем горячую клавишу:
C++
1
2
3
4
5
6
7
8
9
bool RHKret = RegisterHotKey(Form1->Handle,         // Handle окна, которому отправлять сообщения WM_HOTKEY
                             0x00F,                 // УСЛОВНЫЙ идентификатор горячего ключа
                             MOD_ALT + MOD_CONTROL, // модификаторы
                             VK_RETURN              // код клавиши
                             );
if (RHKret) // если всё о'кей
        {
        ShowMessage("Hot Key Registred");
        }
Затем размещаем на Form1 TApplicationEvents и в OnMessage пишем:
C++
1
2
3
4
5
6
7
if (Msg.message == WM_HOTKEY) // сообщение наше
        {
        if (Msg.wParam == 0x00F) // идентификатор наш
                {
                ShowMessage("www.sources.ru"); // громко кричим "уря"
                }
        }
Когда горячая клавиша больше не нужна, отключаем ее:
C++
1
2
3
UnregisterHotKey(Form1->Handle, // Handle окна
                 0x00F          // наш идентификатор горячего ключа
                 );
Так вот пункт 2.
Затем размещаем на Form1 TApplicationEvents и в OnMessage пишем:
Вопрос TApplicationEvents это где?
И OnMessage это где? у меня в events формы нету OnMessage
И последнее так всё же куда закидывать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.06.2012, 02:24
Ответы с готовыми решениями:

Как перехватить нажатие комбинации клавиш?
снова я) помогите а то гугле немогу найти... как сделать штобы когда запущена програма неработали клавиши Alt+F4 Ctr+Alt+Del

Как перехватить нажатие клавиш со стрелками на форме?
Приветствую всех. Вот поиском нашел такое: Однако, по нажатию клавиш "стрелки" событие не активируется, а начинает гонять...

Отключение сочитания клавиш CTRL+ALT+DELETE
доброе суток времени на форме должна не стработать Ctrl+Alt+Delete; напишите код плз.

2
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
06.06.2012, 02:28
ivan.-94,

Цитата Сообщение от ivan.-94 Посмотреть сообщение
Вопрос TApplicationEvents это где?
В компонентах (Tool Palette).


Цитата Сообщение от ivan.-94 Посмотреть сообщение
И OnMessage это где?
У экземпляра TApplicationEvents (на скрине видать).


Цитата Сообщение от ivan.-94 Посмотреть сообщение
И последнее так всё же куда закидывать?
Прям на форму, как обычный компонент.

У меня (XE2) он тут:
Миниатюры
Глобально перехватить нажатие сочитания клавиш  
2
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
06.06.2012, 04:20  [ТС]
Спасибо я врубился
Но ещё одна проблемка а как мне отловить нажатие из сочитая 2-х клавиш
На примере Ctrl+C;

На форму OnCreate
C++
1
2
3
bool RHKret2 = RegisterHotKey(Form1->Handle,0x01F,
                                  VK_CONTROL,
                                  0x43);
И в ApplicationEvents1 OnMessage
C++
1
2
3
4
5
6
7
 if (Msg.message == WM_HOTKEY) // сообщение наше
    {
        if (Msg.wParam == 0x01F) // идентификатор наш
                {
                Button1->Click();
                }
    }
Но так неработает.
А если написать для сочетания из 3-х клавиш
На форму OnCreate
C++
1
2
3
bool RHKret2 = RegisterHotKey(Form1->Handle,0x01F,
                                  MOD_ALT + MOD_CONTROL,
                                  0x43);
И в ApplicationEvents1 OnMessage
C++
1
2
3
4
5
6
7
 if (Msg.message == WM_HOTKEY) // сообщение наше
    {
        if (Msg.wParam == 0x01F) // идентификатор наш
                {
                Button1->Click();
                }
    }
Всё работает
Как мне зделать?

Добавлено через 58 минут


Оп я нашол решение
просто
C++
1
2
3
bool RHKret2 = RegisterHotKey(Form1->Handle,0x01F,
                                  VK_CONTROL,
                                  0x43);
C++
1
VK_CONTROL
нельзя тут должен быть MOD(modifed)
В маём случае получаеться так
C++
1
2
3
bool RHKret2 = RegisterHotKey(Form1->Handle,0x01F,
                                  MOD_CONTROL,
                                  0x43);
Но сталкнулся спроблемой
Программа отлавливает нажатие клавиш и недаёт их системе.
Я нажимая Ctrl+C Выполняю что то в программе но больше не копирую.
Как мне сделать что бы сначала капировался текст в Б.О.
А патом программа делала что то если было нажата Ctrl+C;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2012, 04:20
Помогаю со студенческими работами здесь

Нажатие клавиш
Вобщем, нужна Ваша помощь товарищи гуру. Юзер моей программы должен выбирать окно любой другой программы, в котором спустя некоторые...

Нажатие и удерживание клавиш
Незнаю как назвать даже тему. Но принцип программы такой. При нажимании на клавишу F11,нажимаются клавиша "W" и держится,до...

Реакция на нажатие клавиш
Хочу что бы при одновременном нажатии некоторой комбинации клавиш выполнялось какое то действиеvoid __fastcall TForm1::FormKeyDown(TObject...

Нужно обработать нажатие клавиш
У меня есть много элементов на форме которые забирают на себя фокус поэтому обычные (KeyDown, KeyPress, KeyUp) события обработки кливиш не...

Как запретить нажатие клавиш?
Как мне в моем проекте запретить нажатие следующих клавиш Alt + tab alt + Ctrl + del Alt + F4 Ctrl + Shift + Esc


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
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(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru