Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Считать полную информацию о COM порте в Windows XP
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Neumeyka
Привет всем!

Пишу прогу в Visual Studio 2008 на С++ для работы с COM портами под ОС Windows XP.
Вопрос такой как можно считать дополнительную информацию о COM портах, которая пишится в менеджере устройств.
На рисунке цветом выделил какую именно информацию нужно считывать.

Спасибо!
tyro
Цитата(Neumeyka @ Jun 22 2012, 16:34) *
Вопрос такой как можно считать дополнительную информацию о COM портах, которая пишится в менеджере устройств.

Информацию можно считать из реестра: HKEY_LOCAL_MACHINE\hardware\devicemap\serialcomm
Neumeyka
Спасибо!
megajohn
извиняюсь, что поднял некропост.

А в C# тоже надо через реестр, или есть какой-то готовый, но неведомый мне метод ?
megajohn
Хотелось бы заметить, что предложенное решение не совсем то, что просил топик стартер.
Нажмите для просмотра прикрепленного файла


Вообщем, кому интересно, то на С# будет так:
Код
        //--------------------------------------------------------------------
        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
Цитата(megajohn @ Apr 21 2014, 15:11) *
Хотелось бы заметить, что предложенное решение не совсем то, что просил топик стартер.


Пример поиска порта с нужным именем (на Си):
Код
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;
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.