Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
7 / 6 / 2
Регистрация: 09.08.2018
Сообщений: 27
1

Функция WinAPI для получения данных о вращении колёсика мыши

10.08.2018, 11:19. Показов 5082. Ответов 21

Author24 — интернет-сервис помощи студентам
Народ, кто-нибудь знает функцию виндовского апи, которая позволяла бы получить данные о вращении колёсика мыши, не прибегая к сообщениям процедуры окна?

Для получения координат курсора можно использовать функцию GetCursorPos, для нажатия кнопок используем функцию GetKeyState, а для колёсика мыши всё никак не могу найти ничего, ни на MSDN, ни в остальном интернете.
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2018, 11:19
Ответы с готовыми решениями:

Функция для получения данных из закрытого файла
Всем привет, Помогите плиз Есть два документы exel. формула в одном из этих файлов ссылается...

Использование колесика мыши для открытия папок в новом окне?
Добрый день! Давно во всех браузерах функционирует возможность быстро открыть указанную ссылку в...

Функции WinApi для получения системной информации
Кто может помочь в написании программы "Использование функций WinApi для получения системной...

Управление с колёсика мыши
Привет. Есть процедура, которую можно запустить кнопкой. Как эту же процедуру запускать с помощью...

21
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
18.12.2018, 11:28 21
Author24 — интернет-сервис помощи студентам
У консоли есть отличные функции для работы с мышью, клавиатурой и т.д.

Можно и DirectInput задействовать с консолью. Всё в ваших руках.
Кликните здесь для просмотра всего текста
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <iostream>
#include <windows.h>
#include <windowsx.h>
#include <initguid.h>
#include <dinput.h>
#pragma comment(lib, "Dinput8")
 
class DXMouse
{
public:
    struct XYZ
    {
        int x;
        int y;
        int z;
    };
 
protected:
    IDirectInput8* m_pDirectInput;
    IDirectInputDevice8* m_pDirectInputDevice;
 
public:
    DXMouse(HWND hWnd = 0)
    {
        m_pDirectInput = 0;
        m_pDirectInputDevice = 0;
 
        if (!hWnd)
            hWnd = GetConsoleWindow();
 
        HRESULT hr = CoInitialize(0);
        if (SUCCEEDED(hr))
        {
            hr = DirectInput8Create(GetModuleHandle(0), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&m_pDirectInput, 0);
            if (SUCCEEDED(hr))
            {
                hr = m_pDirectInput->CreateDevice(GUID_SysMouse, &m_pDirectInputDevice, 0);
                if (SUCCEEDED(hr))
                {
                    hr = m_pDirectInputDevice->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND);
                    if (SUCCEEDED(hr))
                    {
                        hr = m_pDirectInputDevice->SetDataFormat(&c_dfDIMouse);
                        if (SUCCEEDED(hr))
                        {
                            DIPROPDWORD dipdw;
                            dipdw.diph.dwSize = sizeof(DIPROPDWORD);
                            dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
                            dipdw.diph.dwObj = 0;
                            dipdw.diph.dwHow = DIPH_DEVICE;
                            dipdw.dwData = DIPROPAXISMODE_ABS; // DIPROPAXISMODE_ABS - абсолютные значения, DIPROPAXISMODE_REL - изменения с последнего запроса
                            hr = m_pDirectInputDevice->SetProperty(DIPROP_AXISMODE, &dipdw.diph);
                            if (SUCCEEDED(hr))
                            {
                                hr = m_pDirectInputDevice->Acquire();
                            }
                        }
                    }
                }
            }
        }
    }
 
    ~DXMouse()
    {
        if (m_pDirectInputDevice)
        {
            m_pDirectInputDevice->Unacquire();
            m_pDirectInputDevice->Release();
        }
 
        if (m_pDirectInput)
            m_pDirectInput->Release();
 
        CoUninitialize();
    }
 
    XYZ GetState()
    {
        XYZ xyz = { 0, 0, 0 };
 
        if (m_pDirectInputDevice)
        {
            DIMOUSESTATE state;
            HRESULT hr = m_pDirectInputDevice->GetDeviceState(sizeof(state), &state);
            if (SUCCEEDED(hr))
            {
                xyz.x = state.lX;
                xyz.y = state.lY;
                xyz.z = state.lZ;
            }
        }
 
        return xyz;
    }
};
 
void main()
{
    DXMouse dxMouse;
 
    for (int i = 0; i < 1000; i++)
    {
        DXMouse::XYZ xyz = dxMouse.GetState();
        std::cout << xyz.x << ", " << xyz.y << " - " << xyz.z << std::endl;
        Sleep(1000);
    }
}
1
0 / 0 / 0
Регистрация: 12.12.2018
Сообщений: 3
18.12.2018, 14:03 22
Ygg, Огромнейшее спасибо!! вы очень помогли!
0
18.12.2018, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2018, 14:03
Помогаю со студенческими работами здесь

Событие колесика мыши
Доброй ночи! У меня такая проблема ,не как не могу добиться выполнения кода после события колесика...

Имитация колёсика мыши
Вообщем есть такой код : function mouse_event(dwFlags, dx, dy, dwData, dwExtraInfo: integer):...

Написать программу для получения сведений о системе, используя WinAPI функции
Всем доброго времени суток, в институте такая вот задача далась, помогите её решить пожалуйста: ...

Имитация прокрутки колесика мыши
Здравствуйте! Подскажите пожалуйста, как с имитировать прокрутку колесика мыши?


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

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