реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Считать полную информацию о COM порте в Windows XP, Название в менеджере устройств, производителя и тп.
Neumeyka
сообщение Jun 22 2012, 12:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 21-07-08
Пользователь №: 39 115



Привет всем!

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

Спасибо!

Сообщение отредактировал Neumeyka - Jun 22 2012, 12:38
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
tyro
сообщение Jun 22 2012, 14:16
Сообщение #2


Любитель Кошек
*****

Группа: Свой
Сообщений: 1 593
Регистрация: 8-06-06
Пользователь №: 17 873



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

Информацию можно считать из реестра: HKEY_LOCAL_MACHINE\hardware\devicemap\serialcomm


--------------------
По современному этикету, в левой руке держат вилку, в правой - мышку.
Go to the top of the page
 
+Quote Post
Neumeyka
сообщение Jun 30 2012, 13:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 21-07-08
Пользователь №: 39 115



Спасибо!
Go to the top of the page
 
+Quote Post
megajohn
сообщение Apr 21 2014, 11:11
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



извиняюсь, что поднял некропост.

А в C# тоже надо через реестр, или есть какой-то готовый, но неведомый мне метод ?


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
megajohn
сообщение Apr 21 2014, 12:11
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Хотелось бы заметить, что предложенное решение не совсем то, что просил топик стартер.
Прикрепленное изображение



Вообщем, кому интересно, то на С# будет так:
Код
        //--------------------------------------------------------------------
        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 "???";
        }


Ща пошукаю, как сделать аналогично диспетчеру задач


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 25 2014, 09:26
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(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;
}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 05:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01418 секунд с 7
ELECTRONIX ©2004-2016