Проверка, существует ли ключ реестра

Да, это возможно. Это просто кажется повышением:: диапазон не имеет поддержки его из поля, но Вы можете

  • использование boost::counting_iterator , который делает, что Вы хотите
  • , реализуют подобный числу объект, чей operator*() возвратил бы число и использование что как итератор для range

10
задан tambre 18 June 2018 в 14:26
поделиться

3 ответа

Прежде всего, не беспокойтесь о производительности для подобных вещей. Если вы не запрашиваете его 100 раз в секунду, этого будет более чем достаточно. Преждевременная оптимизация вызовет у вас все виды головной боли.

RegOpenKeyEx вернет ERROR_SUCCESS, если найдет ключ. Просто проверьте эту константу, и все готово.

11
ответ дан 3 December 2019 в 20:05
поделиться

RegOpenKey возвращает ошибку, если ключ не существует. Как ты им пользуешься? Ожидаемое возвращаемое значение - ERROR_FILE_NOT_FOUND .

Из вашего кода:

HKEY subKey = nullptr;
LONG result = RegOpenKeyEx(key, subPath.c_str(), 0, KEY_READ, &subKey);
if (result != ERROR_SUCCESS) {

Я бы посмотрел на значение ключа и subPath и убедился, что они что вы ожидаете, и что ключ на самом деле не существует. Каково значение subKey впоследствии? Очевидно, что он что-то открывает - попробуйте перечислить его, чтобы увидеть, какие ключи и значения под ним.

Нет проблем с RegOpenKey , не возвращающим ошибку, если ключ не существует - я бы не пытался предположить, что есть какая-то странная ошибка ОС в чем-то, столь же часто используемом, как реестр.

Возможно, у вас есть раздел реестра, который не виден вам, пользователю, который запускает редактор реестра, но не к твоему коду? Возможно, проблема с разрешениями? Ваш код работает как пользователь с повышенными привилегиями в Windows Vista или Server 2008? Вы пробовали запустить редактор реестра от имени администратора?

7
ответ дан 3 December 2019 в 20:05
поделиться

Обратите внимание, что помимо «основных» функций реестра, которые начинаются с «Reg», есть также вспомогательные функции, начинающиеся с «SHReg». Они предназначены для использования оболочкой , т.е. проводником, но задокументированы и могут использоваться также в обычных приложениях. Обычно это тонкие обертки, которые упрощают некоторые общие задачи. Они являются частью "Shell LightWeight API" (shlwapi.dll)

1
ответ дан 3 December 2019 в 20:05
поделиться