Alex553344 0 22 июня, 2012 Опубликовано 22 июня, 2012 (изменено) · Жалоба Привет всем! Пишу прогу в Visual Studio 2008 на С++ для работы с COM портами под ОС Windows XP. Вопрос такой как можно считать дополнительную информацию о COM портах, которая пишится в менеджере устройств. На рисунке цветом выделил какую именно информацию нужно считывать. Спасибо! Изменено 22 июня, 2012 пользователем Neumeyka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tyro 0 22 июня, 2012 Опубликовано 22 июня, 2012 · Жалоба Вопрос такой как можно считать дополнительную информацию о COM портах, которая пишится в менеджере устройств. Информацию можно считать из реестра: HKEY_LOCAL_MACHINE\hardware\devicemap\serialcomm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex553344 0 30 июня, 2012 Опубликовано 30 июня, 2012 · Жалоба Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 21 апреля, 2014 Опубликовано 21 апреля, 2014 · Жалоба извиняюсь, что поднял некропост. А в C# тоже надо через реестр, или есть какой-то готовый, но неведомый мне метод ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 21 апреля, 2014 Опубликовано 21 апреля, 2014 · Жалоба Хотелось бы заметить, что предложенное решение не совсем то, что просил топик стартер. Вообщем, кому интересно, то на С# будет так: //-------------------------------------------------------------------- private string get_com_ext_info( int com_id ) { RegistryKey key = Registry.LocalMachine; key = key.OpenSubKey( "HARDWARE\\DEVICEMAP\\SERIALCOMM" ); string[] names = key.GetValueNames(); for( int i = 0; i < names.Count(); i++ ) { System.Object value = key.GetValue( names[ i ] ); if( value.ToString( ) == ( "COM" + com_id.ToString( ) ) ) return names[ i ].Replace( "\\Device\\", "" ); } return "???"; } Ща пошукаю, как сделать аналогично диспетчеру задач Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msalov 0 25 апреля, 2014 Опубликовано 25 апреля, 2014 · Жалоба Хотелось бы заметить, что предложенное решение не совсем то, что просил топик стартер. Пример поиска порта с нужным именем (на Си): void uart_list_devices() { char name[]="Bluegiga Bluetooth Low Energy"; BYTE* pbuf = NULL; DWORD reqSize = 0; DWORD n=0; HDEVINFO hDevInfo; //guid for ports static const GUID guid = { 0x4d36e978, 0xe325, 0x11ce, { 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 } }; char *str; char tmp[MAX_PATH+1]; int i; SP_DEVINFO_DATA DeviceInfoData; snprintf(tmp,MAX_PATH,"%s (COM%%d)",name); DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA); hDevInfo = SetupDiGetClassDevs(&guid, //Retrieve all ports 0L, NULL, DIGCF_PRESENT ); if(hDevInfo==INVALID_HANDLE_VALUE) return; while(1) { if(!SetupDiEnumDeviceInfo( hDevInfo, n++, &DeviceInfoData )) { SetupDiDestroyDeviceInfoList(hDevInfo); return; } reqSize = 0; SetupDiGetDeviceRegistryPropertyA(hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, NULL, NULL, 0, &reqSize); pbuf = (BYTE*)malloc(reqSize>1?reqSize:1); if (!SetupDiGetDeviceRegistryPropertyA(hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, NULL, pbuf, reqSize, NULL)) { free(pbuf); continue; } str = (char*)pbuf; if(sscanf(str,tmp,&i)==1) { printf("%s\n", str); //emit DeviceFound(str,QString("\\\\.\\COM%1").arg(i)); } free(pbuf); } return; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться