Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для tzeentch
26 / 26 / 13
Регистрация: 13.04.2013
Сообщений: 79

WM_KEYDOWN и WM_HOTKEY конфликтуют?

19.06.2013, 22:45. Показов 1158. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
После того, как я регистрирую несколько хоткеев, я не могу перехватывать сообщение WM_KEYDOWN.

Вот упрощенный исходник того, что я делаю:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <windows.h>
#include <stdio.h>
#include <vector>
 
typedef void(*Function_t)();
std::vector<Function_t> hotkeys;
 
void bind( Function_t foo, int key, int mod ) {
  RegisterHotKey( NULL, hotkeys.size(), mod, key );
  hotkeys.push_back(foo);
}
 
void foo1() {
  printf("foo1()\n");
}
 
void foo2() {
  printf("foo2()\n");
}
 
int main() {
 
  bind( foo1, VK_UP, 0 );
  bind( foo2, VK_RIGHT, MOD_CONTROL );
 
  //...
 
  MSG msg;
  while( GetMessage( &msg, 0, 0, 0 ) ) {
    TranslateMessage( &msg );
    switch(msg.message) {
      case WM_HOTKEY:
        hotkeys[msg.wParam]();
        break;
      case WM_KEYDOWN:
        printf("!!\n");
        //...
        break;
    }
    DispatchMessage( &msg );
  }
}


Подскажите пожалуйста, что я делаю не так?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.06.2013, 22:45
Ответы с готовыми решениями:

Отработка WM_KEYDOWN в случае запуска через WM_HOTKEY
Привет друзья, очень нужна ваша помощь. Сам видимо на разберусь. Ранее я написал программу которая делает скрины. Сидит она в трее и...

WM_KEYDOWN
когда программе поступает сообщение WM_KEYDOWN обрабатываю его так HANDLE_MSG(hwnd,WM_KEYDOWN,OnKeydown); дальше есть функция void...

WM_KEYDOWN
на мсдн написано что функцию вызывать так, case WM_KEYDOWN: switch (wParam) { case VK_UP: // up was pressed...

3
 Аватар для tzeentch
26 / 26 / 13
Регистрация: 13.04.2013
Сообщений: 79
21.06.2013, 00:45  [ТС]
Эх... что-то мне подсказывает, что я вообще неверно его перехватываю...
А как его перехватывать, если не создавать окно?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
21.06.2013, 12:24
Цитата Сообщение от tzeentch Посмотреть сообщение
А как его перехватывать, если не создавать окно?
- создай чайлд окно из которого ретранслируй посредством SendMessageCallback в HWND консоли, а в этом цикле
Цитата Сообщение от tzeentch Посмотреть сообщение
while( GetMessage( &msg, 0, 0, 0 ) ) {
уже делай парсинг.

Добавлено через 1 минуту
@tzeentch, вообще что ты хочешь пропарсить клавиши в консольке?
Погляди Стрелки клавиатуры в консоли
0
 Аватар для tzeentch
26 / 26 / 13
Регистрация: 13.04.2013
Сообщений: 79
21.06.2013, 15:23  [ТС]
Вообще, если смотреть на проблему шире - хотелось бы иметь возможность в консольной проге присобачить к комбинациям клавиш (типа "Ctrl+A", "Alt+Shift+F3") вызовы функций. Только не глобально, как через RegisterHotKey... И при этом иметь возможность, если нажата клавиша для которой действие не определено, вызывать некую функцию по умолчанию, те при нажатии просто "A" вызывать что-то типа onKeyPress( 'A' ); Здесь я и пытался это реализовать - хоткеи работают, а вот клавиши нет...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2013, 15:23
Помогаю со студенческими работами здесь

ip конфликтуют.
Может конечно пишу не в эту тему, но поскольку это касается модема и компа то решил написать сюда. В общем проблема в том : есть модем...

Не работает WM_KEYDOWN
Доброго времени суток! Возникла проблема: после нажатия на кнопку &quot;New Game&quot; программа почему-то перестает принимать сообщения с...

Не работает WM_KEYDOWN
Помогите плиз. Вот кусок кода в оконной процедуре: ... case WM_KEYDOWN: switch (wParam) { case VK_LEFT: if(MatrLine == 2)...

WM_KEYUP, WM_KEYDOWN
Прошу о помощи! Задача: пользователь вводит парольную фразу (одну из предложенных) в текстбокс.Необходимо зафиксировать время удержания...

Не отвечает на wm_keydown
procedure TBoard.WndProc(var msg: TMessage); //Оконная процедура. begin inherited WndProc(msg); case msg.Msg of ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru