Как можно програмно определить тип подключенной клавиатуры? Т.е. опредлить, что подключена ps/2, usb, или обе.
Ret прав, вот у меня обычная PS/2: STANDARD 101/102-KEY OR MICROSOFT NATURAL PS/2 KEYBOARD::{4D36E96B-E325-11CE-BFC1-08002BE10318}\0000;
Отключаю USB клавиатуру и все равно под HKLM\System\CCS\Control\Classes\4D36E96B-E325-11CE-BFC1-08002BE10318\ вижу и ps/2 и usb.
katrus Код (Text): Отключаю USB клавиатуру и все равно под HKLM\System\CCS\Control\Classes\4D36E96B-E325-11CE-BFC1-08002BE10318\ вижу и ps/2 и usb. Естественно - эти драйвера установлены в системе. Используйте SetupDiGetClassDevs с флагом DIGCF_PRESENT(загруженные драйверы) + SetupDiEnumDeviceInfo + SetupDiGetDeviceRegistryProperty
gorodon Большое спасибо! Как раз то, что нужно. Вдруг кому потребуется - код показывающий все подключенныей клавиатуры: Код (Text): #include <Windows.h> #include <SetupAPI.h> #include <stdio.h> #pragma comment(lib, "setupapi.lib") void main() { const GUID GUID_DEVCLASS_KEYBOARD = { 0x4D36E96B, 0xE325, 0x11CE, { 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 }}; HDEVINFO devs = SetupDiGetClassDevs(&GUID_DEVCLASS_KEYBOARD, 0, 0, DIGCF_PRESENT); for (int i = 0; ; i ++) { SP_DEVINFO_DATA dev_info = {0}; dev_info.cbSize = sizeof(dev_info); if (! SetupDiEnumDeviceInfo(devs, i, &dev_info)) break; GUID bus_guid = {0}; DWORD bus_guid_size = sizeof(bus_guid); BOOL is_bus = SetupDiGetDeviceRegistryProperty( devs, &dev_info, SPDRP_BUSTYPEGUID, NULL, (PBYTE)&bus_guid, bus_guid_size, &bus_guid_size); printf("#%d %s\n", i, is_bus ? "usb" : "ps2"); } }