как получить список com портов?
От: Sartorius78  
Дата: 02.05.07 13:43
Оценка:
Подскажите, как получить список доступных com портов в системе?
Спасибо.
Re: как получить список com портов?
От: wellwell Австралия https://www.softperfect.com
Дата: 02.05.07 13:54
Оценка: -2
"Sartorius78" <64632@users.rsdn.ru> wrote in message news:2470883@news.rsdn.ru...
> Подскажите, как получить список доступных com портов в системе?
> Спасибо.

Попробовать открыть COMx где x от 1 до 9?
Posted via RSDN NNTP Server 2.0
Re: как получить список com портов?
От: sterya Россия  
Дата: 03.05.07 04:18
Оценка:
Здравствуйте, Sartorius78, Вы писали:

S>Подскажите, как получить список доступных com портов в системе?

здесь
Автор: _const_
Дата: 12.05.06
Re: как получить список com портов?
От: ncode  
Дата: 03.05.07 12:19
Оценка:
Здравствуйте, Sartorius78, Вы писали:

S>Подскажите, как получить список доступных com портов в системе?

S>Спасибо.

У меня так сделано:
//adapt STL string to UNICODE
typedef std::string TStringA;
typedef std::wstring TStringW;
#ifdef _UNICODE
typedef std::wstring TString;
#else
typedef std::string TString;
#endif //_UNICODE
typedef std::vector<TString> TStrings;
...
bool GetComPortNames(TStrings& port_names)
{
    //enumerate all devices
    const size_t buffer_size = 16*KILOBYTE;
    TCHAR buffer[buffer_size] = {};
    if(FALSE == ::QueryDosDevice(NULL, buffer, buffer_size))
    {
        TraceLastError(_T("TOptions::TOptions() ::QueryDosDevice() failed"));
        return false;
    }

    //get comport names
    LPCTSTR buffer_end = buffer + buffer_size;
    LPCTSTR device_name = buffer;
    size_t device_name_size = ::_tcslen(device_name);
    port_names.clear();
    while(device_name < buffer_end)
    {
        if(0 == device_name_size) //"\0\0" sequance represents empty string
            return true;

        //is device_name represents com port?
        if(device_name_size > 3 &&
            _T('C') == device_name[0] &&
            _T('O') == device_name[1] &&
            _T('M') == device_name[2])
            port_names.push_back(TString(device_name));

        //get next device name
        device_name += device_name_size + 1;
        device_name_size = ::_tcslen(device_name);
    }
    return true;
}
Re: как получить список com портов?
От: _kaimonomah_  
Дата: 07.05.07 03:56
Оценка:
Здравствуйте, Sartorius78, Вы писали:

S>Подскажите, как получить список доступных com портов в системе?

S>Спасибо.

Если Windows, то список COM-портов храниться в разделе реестра HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERALCOMM
Re: как получить список com портов?
От: Leonid Troyanovsky  
Дата: 07.05.07 10:46
Оценка:
Здравствуйте, Sartorius78, Вы писали:

S>Подскажите, как получить список доступных com портов в системе?


http://rsdn.rsdn.ru/Forum/Message.aspx?mid=460793&amp;only=1
Автор: Leonid Troyanovsky
Дата: 29.11.03
--
С уважением, LVT
Re: как получить список com портов?
От: Аноним  
Дата: 10.05.07 14:04
Оценка:
S>Подскажите, как получить список доступных com портов в системе?

Соотв. функция есть в библиотеке SynaSer
Re: как получить список com портов?
От: Decoy Литва  
Дата: 14.05.07 07:26
Оценка:
Здравствуйте, Sartorius78, Вы писали:

S>Подскажите, как получить список доступных com портов в системе?

S>Спасибо.

static bool EnumerateCOMPorts(std::set<int>& sComPortNumbers);

bool TCallManager::EnumerateCOMPorts(std::set<int>& sComPortNumbers)
{
static GUID GUID_DEVINTERFACE_COMPORT =     {0x86E0D1E0L, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73};

    HDEVINFO hDevInfo = SetupDiGetClassDevs((LPGUID) &GUID_DEVINTERFACE_COMPORT, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
    if (hDevInfo == INVALID_HANDLE_VALUE) {
        return false;
    }
    BOOL bMoreItems = TRUE;
    int iIndex = 0;
    SP_DEVINFO_DATA devInfoData;
    while (bMoreItems) {
        devInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
        bMoreItems = SetupDiEnumDeviceInfo(hDevInfo, iIndex, &devInfoData);

        if (bMoreItems) {
            HKEY hDeviceKey = SetupDiOpenDevRegKey(
                hDevInfo,
                &devInfoData,
                DICS_FLAG_GLOBAL,
                0,
                DIREG_DEV,
                KEY_QUERY_VALUE);

            TCHAR PortName[256];
            if (hDeviceKey != INVALID_HANDLE_VALUE) {
                DWORD dwSize = sizeof(PortName);
                DWORD dwType;

                memset(PortName, 0x00, sizeof(TCHAR) * 256);

                if ((RegQueryValueEx(hDeviceKey, "PortName", NULL, &dwType, PortName, &dwSize) == ERROR_SUCCESS) && (dwType == REG_SZ)) {
                    //process port name here
                    if (_tcslen(PortName) > 3) {
                        int iPort;
                        if (sscanf(PortName, "COM%d", &iPort) == 1)
                            sComPortNumbers.insert(iPort);
                    }
                }
                RegCloseKey(hDeviceKey);
            }
        }
        ++iIndex;
    }

    SetupDiDestroyDeviceInfoList(hDevInfo);
    return true;
}


Для успешной компиляции надо подключить setupapi.h
#include <setupapi.h>
#include <set>
using namespace std;

Этот код возвращает все доступные для открытия номера COM-портов системы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.