Написал небольшой код, который в моем случае воспроизводит проблему, и не определяет устройства правильно.
Исходя из следующего кода, можно сказать что не установлена ни мышь, ни клавиатура:
HID name: \\?\HID#VID_045E&PID_028E&IG_00#7&5d88da&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
HID name: \\?\HID#VID_17EF&PID_60BF&MI_01&Col03#7&1d547d06&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}
HID name: \\?\HID#VID_09DA&PID_5FBA&MI_02&Col04#7&17019a7b&0&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}
HID name: \\?\HID#VID_09DA&PID_5FBA&MI_02&Col03#7&17019a7b&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}
HID name: \\?\Root#RDP_KBD#0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}
HID name: \\?\HID#VID_17EF&PID_60BF&MI_01&Col01#7&1d547d06&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}
HID name: \\?\HID#VID_17EF&PID_60BF&MI_00#7&30849944&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}
HID name: \\?\HID#VID_09DA&PID_5FBA&MI_02&Col01#7&17019a7b&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}
HID name: \\?\HID#VID_09DA&PID_5FBA&MI_00#7&2a1a55f3&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}
HID name: \\?\Root#RDP_MOU#0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd}
HID name: \\?\HID#VID_09DA&PID_5FBA&MI_01#7&3ad8d83d&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd}
Конечно, может быть я не так понял это дело, но код приведенный ниже, гарантирует мне тот факт, что устройства не определяются как мышь, и клавиатура:
#include <iostream>
#include <vector>
#include <Windows.h>
int main(int argc, char* argv[])
{
// определить вектор RAWINPUTDEVICELIST
std::vector<RAWINPUTDEVICELIST> device_list_info;
uint32_t device_count = 0;
// получить кол-во устройств
(void)GetRawInputDeviceList(nullptr, &device_count, sizeof RAWINPUTDEVICELIST);
// изменить размер вектора, что бы подготовить его к записи списка устройств
device_list_info.resize(device_count);
// записать данные в вектор
(void)GetRawInputDeviceList(device_list_info.data(), &device_count, sizeof RAWINPUTDEVICELIST);
// определим вектор для извлечения данных об устройствах
std::vector<std::pair<std::wstring, RID_DEVICE_INFO>> device_data_list;
// изменить размер
device_data_list.resize(device_count);
for (size_t i = 0; i < device_count; i++)
{
uint32_t device_name_size = 0;
// получаем размер строки с названием устройства
(void)GetRawInputDeviceInfoW(device_list_info[i].hDevice, RIDI_DEVICENAME, nullptr, &device_name_size);
// изменяем размер строки для записи данных
device_data_list[i].first.resize(device_name_size);
// записываем данные
(void)GetRawInputDeviceInfoW(device_list_info[i].hDevice, RIDI_DEVICENAME, &device_data_list[i].first[0], &device_name_size);
uint32_t device_info_data_size = 0;
// получим размер структуры с данными, обычно возвращает 32 байта
(void)GetRawInputDeviceInfoW(device_list_info[0].hDevice, RIDI_DEVICEINFO, nullptr, &device_info_data_size);
// выделяем кол-во необходимой памяти
byte* device_info_byte_data = new byte[device_info_data_size];
// записываем данные
(void)GetRawInputDeviceInfoW(device_list_info[0].hDevice, RIDI_DEVICEINFO, device_info_byte_data, &device_info_data_size);
// скопируем данные в подготовленную структуру
memcpy_s(&device_data_list[i].second, sizeof(device_data_list[i].second), device_info_byte_data, device_info_data_size);
// освободить выделенную ранее память
delete[] device_info_byte_data;
}
for (const std::pair<std::wstring, RID_DEVICE_INFO>& current_info : device_data_list)
{
switch (current_info.second.dwType)
{
case RIM_TYPEMOUSE:
std::wcout << L"mouse id: " << current_info.second.mouse.dwId << " "
<< L"buttons count: " << current_info.second.mouse.dwNumberOfButtons << " "
<< L"has horizontal wheel: " << current_info.second.mouse.fHasHorizontalWheel << " "
<< std::endl;
break;
case RIM_TYPEKEYBOARD:
std::wcout << L"keyboard name: " << current_info.first.c_str() << std::endl;
break;
case RIM_TYPEHID:
std::wcout << L"HID name: " << current_info.first.c_str() << std::endl;
break;
default: break;
}
}
}
Можно ли сказать что Human Input Device's могут являться мышью и клавиатурой?
Если так, то как их отличать?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Мне нужно было перенести указатель файла на один символ назадПоэтому я использовал fseek(f,-sizeof(char),SEEK_CUR);
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»
Есть одна исключительная ситуация, но нужно чтобы на нее было 2 разных реакции
При отладки кода на c++, IDE выводит вот такое сообщение: FTH: (11040): * Fault tolerant heap shim applied to current processThis is usually due to previous crashes