Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Отследить нажатие клавиши мыши

01.04.2020, 19:52. Показов 6287. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Помогите пожалуйста простеньким примером, как можно отследить нажатия кнопки мыши ?
Гугл говорит и про установку хуков(вообще ад какой то) и про WM_LBUTTONDOWN/WM_NCLBUTTONDOWN через функцию WindowProc, но ни то не то, по MSDN`у не могу понять, как использовать

Может есть простенький пример ? Если простенький пример вообще возможен в данном случае.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.04.2020, 19:52
Ответы с готовыми решениями:

Как отследить нажатие и удержание клавиши CTRL в момент клика мышью?
В процедуре WndProc: case WM_USER + 200: { if(lparam == WM_LBUTTONDOWN) // клик по иконке в трее { // отследить: в...

Нажатие и отпускание клавиши
Доброго времени суток.. проблема возникла при написании игры танчики(класика как на денди). Проблема в том, что когда задерживаешь клавишу...

Нажатие клавиши (dll)
Нужно чтобы при нажатии одной клавиши (w), нажималась другая (ctrl). #include <windows.h> LRESULT CALLBACK WindowProc(HWND...

9
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
01.04.2020, 21:03
RawInput подойдёт?

Не по теме:

Опыты с RawInput на несколько мышек

1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2020, 13:27
Цитата Сообщение от Optimus11 Посмотреть сообщение
Может есть простенький пример ? Если простенький пример вообще возможен в данном случае.
Using Mouse Input
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
04.04.2020, 16:56  [ТС]
Цитата Сообщение от Alikberov Посмотреть сообщение
RawInput подойдёт?

Не по теме:

Опыты с RawInput на несколько мышек

Подскажите пожалуйста, вот пытаюсь с помощью RawInput сделать для этого:

1)Сначала нужно, как говорит микрософт - Зарегистрировать устройство, которые предоставляют необработанные входные данные.
Делается это с помощью функции - RegisterRawInputDevices.
(https://docs.microsoft.com/en-... putdevices)

2)Функция RegisterRawInputDevices, как написано на ее страничке первым параметром принимает:
C++
1
2
3
Тип: PCRAWINPUTDEVICE
 
Массив структур RAWINPUTDEVICE, которые представляют устройства, которые обеспечивают необработанный ввод.
3)Открываю страницу с описанием структуры RAWINPUTDEVICE:
(https://docs.microsoft.com/en-... nputdevice)

Объявляю саму структуру:
C++
1
2
3
4
5
6
        RAWINPUTDEVICE My_RAWINPUTDEVICE;
 
    My_RAWINPUTDEVICE.usUsagePage = 1;
    My_RAWINPUTDEVICE.usUsage = 2;
    My_RAWINPUTDEVICE.dwFlags = 0;
    My_RAWINPUTDEVICE.hwndTarget = NULL;
4)Но при попытке указать первым параметром эту структуры в функции RegisterRawInputDevices - вылазит ошибка:
C++
1
Не существует подходящей функции преобразования из RAWINPUTDEVICE  в PCRAWINPUTDEVICE.
Но в описании функции RegisterRawInputDevices дана именно ссылка на RAWINPUTDEVICE, хотя и указан тип параметра PCRAWINPUTDEVICE.

И как это можно понять тогда ?

Добавлено через 2 часа 29 минут
Все понял.

PCRAWINPUTDEVICE - это указатель на структуру RAWINPUTDEVICE.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
07.04.2020, 10:59  [ТС]
Блин, я не могу понять:

C++
1
2
3
4
5
6
7
UINT GetRawInputData(
  HRAWINPUT hRawInput,
  UINT      uiCommand,
  LPVOID    pData,
  PUINT     pcbSize,
  UINT      cbSizeHeader
);
Параметр hRawInput - это дескриптор RAWINPUT структуры, но этот параметр берется из параметра lParam в WM_INPUT .

Соответственно параметры из WM_INPUT - Отправляется в окно, которое получает необработанный ввод. Окно получает это сообщение через функцию WindowProc.

Соответсвенно WindowProc - обрабатывающая сообщения, отправленные в окно.
C++
1
2
3
4
5
6
LRESULT CALLBACK WindowProc(
  _In_ HWND   hwnd,
  _In_ UINT   uMsg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);
Где параметр hwnd - это хэндл окна.


Я вообще ни как не могу понять, почему на каждом пункте требуется какая то привязка к какому то окно ?? Это же "сырые данные" ?
Если у меня нет окна, если у меня просто рабочий стол ? И вообще почему для сырых данных с usb устройства требуется какая та привязка к окну ?
Я просто хочу узнать нажималась ли кнопка на мышке или клаивиатуре и все
0
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
07.04.2020, 12:47
Цитата Сообщение от Optimus11 Посмотреть сообщение
Я вообще ни как не могу понять, почему на каждом пункте требуется какая то привязка к какому то окно ?? Это же "сырые данные" ?
Тoже впал в ступор когда-то, так как обработка сырых событий должна, по логике, проходить как минимум, через CallBack-функцию.
Однако, где-то в хабре (?) нашёл простое объяснение: Код драйверов RawInput некогда писали индусы левой команды и так всё это дело осталось…
Приходится мириться, с этим ничего не поделаешь!

Хотя, оконная функция - тот же CallBack в цикле WinMain.
Это хоть как-то успокаивает: Можно создать отдельный поток и обрабатывать в нём "сырую" мышиную возню на высоком приоритете…
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
07.04.2020, 19:33  [ТС]
Так в итоге, необходимо все равно какое то окно ?
Если у меня просто рабочий стол ?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.04.2020, 19:36
Цитата Сообщение от Optimus11 Посмотреть сообщение
Так в итоге, необходимо все равно какое то окно ?
Если у меня просто рабочий стол ?
У тебя не рабочий стол, а по-любому какое-то приложение, скорее всего оконное, WinMain. Создай невидимое окно, там и обрабатывай.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
07.04.2020, 19:44  [ТС]
Нет, не winmain, а обычное консольное main().
Вообще никаких окон нет.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.04.2020, 19:50
Цитата Сообщение от Optimus11 Посмотреть сообщение
Нет, не winmain, а обычное консольное main().
Сделай оконное. Судя по всему, этот raw input, для для оконных приложений.
Для консоли - https://docs.microsoft.com/en-... fer-events
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.04.2020, 19:50
Помогаю со студенческими работами здесь

Не реагирует на нажатие клавиши
Привет ребят. Есть окно, которое имеет 2 поля. В поле 1 мы вводим число, затем нажимаем F6 и в поле 2 выводится наше число в бинарном виде....

Отловить двойное нажатие клавиши
Нужно отловить двойное нажатие клавиши: case WM_LBUTTONDBLCLK: printf("1"); } Никакой реакции. Пробовал и так: case...

Послать нажатие клавиши окну
Пишу прогу L2Injector, отправляю нажатие клавиши так PostMessage(HWND, WM_KEYDOWN, 'E', 0L); на некоторых серверах работает, а на некоторых...

Отследить движение мыши в окне, созданном при помощи mciSendString
Здравствуй те Господа !!! Возник вопрос - допустим есть некое чужое окно (скажу сразу это не вирус , а окно созданное при открытии .avi...

Передать нажатие клавиши другому приложению
предположим, что по нажатию F5 в программе выполняются определенные действия. как передать из моей программы в эту нажатие F5?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru