С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 04.02.2015
Сообщений: 3
1

Отзеркаливание клавиш мыши при зажатом Space

17.07.2017, 22:28. Показов 1596. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте товарищи программисты. Преподователь озадачил вот такой задачей.
Необходимо создать консольную программу, которая будет менять клавиши ПКМ 1 и ПКМ 2 (левая и правая кнопка мыши) местами при зажатой клавиши Space.
Я погуглил и так понял что нужно сделать что-то типа Key Remapper. Но как это осуществить я не знаю. Можете помочь с кодом?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2017, 22:28
Ответы с готовыми решениями:

Как сделать, чтобы сочетание клавиш 'enter'+'space' выходили из консоли
#include <iostream> #include <conio.h> using namespace std; int main() { char c; ...

Перемещение мыши при помощи клавиш со стрелками
Как с помощью стрелок вправо влево передвигать курсор мыши?

Всплывающая реклама в браузере при любом нажатии клавиш мыши
Жена вчера искала необходимую информацию и загрузила непонятно что, постоянно просит позвонить...

Изменение цвета в обратном направлении при зажатом shift
Нужно чтобы в "private void button3_Click(object sender, EventArgs e) // Меняет цвета" при зажатом...

3
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
18.07.2017, 02:26 2
Лучший ответ Сообщение было отмечено tiaron_not как решение

Решение

tiaron_not, что-то вот такое работает:
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
43
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    static DWORD Prev = -1;
    if (nCode == HC_ACTION)
    {
        PKBDLLHOOKSTRUCT p = reinterpret_cast<PKBDLLHOOKSTRUCT>(lParam);
        switch (wParam)
        {
        case WM_KEYDOWN:
        case WM_KEYUP:
            if (p->vkCode == VK_SPACE && Prev != p->flags) {
                cout << "+ " << p->flags << " " << wParam << endl;
                Prev = p->flags;
                SwapMouseButton(wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN);
                break;
            }
            break;
        default:
            break;
        }
    }
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}
 
int main()
{
    HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 0, 0);
 
    MSG msg;
    while (!GetMessage(&msg, NULL, NULL, NULL)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    UnhookWindowsHookEx(hhkLowLevelKybd);
 
    return 0;
}
Низкоуровневый хук на клавиатуру, чтобы отлавливать нажатия пробела, и SwapMouseButton, чтобы менять кнопки мышки. Ну и какой-то костыль для игнорирования повтора зажатой клавиши.

Добавлено через 5 минут
tiaron_not, можно вместо всего этого попробовать повесить хук на мышку, а там уже подменять события нажатия кнопок, но боюсь, что оно будет жутко лагать.
1
0 / 0 / 0
Регистрация: 04.02.2015
Сообщений: 3
18.07.2017, 17:13  [ТС] 3
Всё отлично работает, спасибо. Только возник ещё один вопрос, как скомпилить код в .exe?
0
0 / 0 / 0
Регистрация: 04.02.2015
Сообщений: 3
18.07.2017, 17:23  [ТС] 4
Разобрался где он лежит. Можно закрыть тему.
P.s. Ещё раз спасибо за код.
Отзеркаливание клавиш мыши при зажатом Space
0
18.07.2017, 17:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2017, 17:23
Помогаю со студенческими работами здесь

Как сэмулировать нажатие клавиш Alt+Space, используя функцию SendInput?
Друзья! МНе нужно на консоли получить меню. То есть нажал левую ALT, нажал пробел, отпустил пробел,...

Маппирование памяти из user space в system space
В драйвер передается указатель из приложения, который указывает на область памяти в приложении....

Задача на отзеркаливание массива
Привет форумчане. Требуется ваша помощь. Имеется одномерный массив с определенными числами....

Программное нажатие клавиш мыши
Уже 3 день думаю как сотворить сие)) Хочу в игре нажимать программно мышь через определенные...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru