Название: Значение ключа реестра (WinAPI) Отправлено: Arrovil от Марта 01, 2011, 12:26 Доброго времени суток. Задача такова, что надо получить список всех com-портов в системе (WinXP). Вариант с попыткой записи чего-нибудь в каждый порт не подходит - порт может быть занят, тогда тоже не будет ответа. Остается вариант через реестр: в ветке HKEY_LOCAL_MACHINEHARDWARE\DEVICEMAP\SERIALCOMM есть соответствующие ключи вида \Device\Serial0 со значением COM0. Через QSettings не получится - ключи имеют обратный слэш, который не поддерживается. В документации говорят юзать WinAPI.
Тут, собственно, и возникает проблема: получаю только одно значение (притом из трех имеющихся в реестре - почему-то среднее). Вот код: Код Подскажите, в чем именно ошибка? Название: Re: Значение ключа реестра (WinAPI) Отправлено: vunder от Марта 01, 2011, 15:37 Все просто до безобразия.
После первого вызова значения размеров буферов, передаваемых в функцию (cName и cValue) изменяются на размеры соответствующих строк, поэтому перед каждным новым вызовом из нужно заново инициализоровать. Вообще принято делать так: Код
Название: Re: Значение ключа реестра (WinAPI) Отправлено: kuzulis от Марта 01, 2011, 17:06 Arrovol,
вот в помощь уже готовое: QSerialDevice -> http://gitorious.org/qserialdevice или QextSerialPort -> http://code.google.com/p/qextserialport/ Если нужно именно извлекать из ( KEY_LOCAL_MACHINEHARDWARE\DEVICEMAP\SERIALCOMM ) - то поможет (вроде) QSerialDevice древней версии 0.1.0 или 0.2.0 - там именно таким образом оно добывалось. Название: Re: Значение ключа реестра (WinAPI) Отправлено: Arrovil от Марта 02, 2011, 10:13 vunder, спасибо, заработало все.
Я уже выловил ошибку 234 (наличие еще какого-то объема данных), начал обнулять массивы в цикле, но ничего не менялось. А оказывается, нужно было инициализировать заново... Благодарю за совет. kuzulis, да, я видел, но там вроде несколько по другому это реализовано, плюс тоже какие-то вопросы возникали. Хотя если в старых версиях это тоже через эти же ключи делалось, надо будет посмотреть. В любом случае, спасибо за подсказку. |