Доброго времени суток. Задача такова, что надо получить список всех com-портов в системе (WinXP). Вариант с попыткой записи чего-нибудь в каждый порт не подходит - порт может быть занят, тогда тоже не будет ответа. Остается вариант через реестр: в ветке
HKEY_LOCAL_MACHINEHARDWARE\DEVICEMAP\SERIALCOMM есть соответствующие ключи вида
\Device\Serial0 со значением
COM0. Через QSettings не получится - ключи имеют обратный слэш, который не поддерживается. В документации говорят юзать WinAPI.
Тут, собственно, и возникает проблема: получаю только одно значение (притом из трех имеющихся в реестре - почему-то среднее).
Вот код:
C++ (Qt)
HKEY hKey;
int i=0;
TCHAR Name[4096];
TCHAR Value[4096];
DWORD cName=4096;
DWORD cValue=4096;
QString myports;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
{
while(RegEnumValue(hKey,i,Name,&cName,NULL,NULL,(LPBYTE)&Value,&cValue)==ERROR_SUCCESS)
{
myports.append(QString::fromUtf16((ushort*)Value));
i++;
}
QMessageBox::information(this, QString::number(i, 10), myports);
}
Подскажите, в чем именно ошибка?