Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Raw Input

311
30 марта 2011 года
plastictown
309 / / 08.01.2006
Доброго времени суток всем! Давече сидя на работе решил получить список устройств через GetRawInputDeviceList() и вывести их свойства, взятые через GetRawInputDeviceInfo(). Написал такое вот полотно:

Код:
using namespace std;
 
int _tmain(int argc, TCHAR** argv)
{

    UINT nDevices;
    PRAWINPUTDEVICELIST list=0;
    UINT    uSize=0;
    RID_DEVICE_INFO rdi;

    if  (!GetRawInputDeviceList(    NULL,
                                    &nDevices,
                                    sizeof(RAWINPUTDEVICELIST)))
    {
        list=(PRAWINPUTDEVICELIST)malloc(sizeof(RAWINPUTDEVICELIST)*nDevices);

        if(GetRawInputDeviceList(   list,
                                    &nDevices,
                                    sizeof(RAWINPUTDEVICELIST))==-1)
        {
            _tprintf(_T("GetRawInputDeviceList() - [ERROR]\nError %d\n"),GetLastError());
        }
        else
        {
            _tprintf(_T("GetRawInputDeviceList() - [OK]\n"));

            CMyString str;

            for(UINT i=0; i< nDevices; i++)
            {
                str.SetNull();

                switch(list.dwType)
                {
                case RIM_TYPEHID:
                    str=_T("HID");
                    break;
                case RIM_TYPEKEYBOARD:
                    str=_T("Keyboard");
                    break;
                case RIM_TYPEMOUSE:
                    str=_T("Mouse");
                    break;
                }

                memset(&rdi, 0, sizeof(RID_DEVICE_INFO));

                rdi.cbSize=sizeof(RID_DEVICE_INFO);

                if(GetRawInputDeviceInfo(   list.hDevice,
                                            RIDI_DEVICEINFO,
                                            &rdi,
                                            &uSize)>0)
                {
                    switch(list.dwType)
                    {
                    case RIM_TYPEMOUSE:
                        _tprintf(       _T("Device [%d]\n\ttype: %s\n\t")
                                        _T("id=%d\n\tbuttons=%d\n\t")
                                        _T("rate=%d\n\twheel=%d\n"), i,     str.GetBuffer(),
                                                                rdi.mouse.dwId,
                                                                rdi.mouse.dwNumberOfButtons,
                                                                rdi.mouse.dwSampleRate,
                                                                rdi.mouse.fHasHorizontalWheel);
                        break;
                    case RIM_TYPEKEYBOARD:
                        _tprintf(       _T("Device [%d]\n\ttype: %s\n\t")
                                        _T("func keys=%d\n\t")
                                        _T("indicators=%d\n\t")
                                        _T("total keys=%d\n"), i, str.GetBuffer(), rdi.keyboard.dwNumberOfFunctionKeys,
                                                                rdi.keyboard.dwNumberOfIndicators, rdi.keyboard.dwNumberOfKeysTotal);
                        break;
                    case RIM_TYPEHID:

                        break;
                    };
                }
                else
                {
                //_tprintf(_T("Device [%d] type: %s\n"), i, str.GetBuffer());
                }

               
            }
        }
    }
    else
    {
        _tprintf(_T("GetRawInputDeviceList() - [ERROR]\n"));
    }


    _tprintf(_T("press any key to close this window...\n"));
    wcin.get();
    return 0;
}


Тут CMyString - самописный класс строки (не суть).

Все выводится как надо, только в два раза больше. У меня 1 мышь и 1 клавиатура, а результат такой:

Цитата:

GetRawInputDeviceList() - [OK]
Device [0]
type: Keyboard
func keys=0
indicators=0
total keys=0
Device [1]
type: Keyboard
func keys=12
indicators=3
total keys=101
Device [2]
type: Mouse
id=2
buttons=2
rate=60
wheel=0
Device [3]
type: Mouse
id=32
buttons=3
rate=200
wheel=0



Может кто знает как из списка выбрать нужные устройства? Спасибо!

311
31 марта 2011 года
plastictown
309 / / 08.01.2006
Вчера на ноутбуке нашел аж 9 устройств( подключено 3)! Что же это за устройства такие?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог