Изменить значения реестра
Я хочу изменить значения реестра на pocketPC. Я запустил следующий код:
if(enabled)
{
dwData = 120;
}
if(RegSetValueEx(HKEY_LOCAL_MACHINE, _T("System\\CurrentControlSet\\Control\\Power\\Timeouts\\BattSuspendTimeout"), 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)))
{
return FALSE;
}
но это не меняет запись в реестре. Кто-нибудь знает, как установить значения ключа реестра с C++?
Спасибо!
5 ответов
Есть две проблемы с тем, что вы делаете:
1: RegSetValueEx не принимает путь, только имя-значения. Так что вам нужно сначала открыть ключевой путь.
например
HKEY key;
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Control\\Power\\Timeouts", 0, 0, &key))
{
if(RegSetValueEx(key, _T("BattSuspendTimeout"), 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)))
{
RegCloseKey(key);
return FALSE;
}
RegCloseKey(key);
}
2: эта область реестра требует подписи привилегированного кода для работы на всех устройствах Windows Mobile. Вы можете обойтись без него на большинстве современных мобильных устройств с сенсорным экраном Windows, если пользователь ответит "да" на вопрос неизвестного издателя при первом запуске или установке приложения. Если вы получили ошибку "Отказано в доступе" на наборе, то вам действительно нужно иметь привилегированный код, подписанный для работы набора.
Посмотрите [VORegistry][1], это значительно облегчает работу с реестром.
[1]: http://www.voscorp.com/products/developer/winmobile/voregistry/index.htm VORegistry
Как вы проверяете изменения? Имейте в виду, что внесение этого изменения не будет автоматически отражаться на поведении устройства и, вероятно, не будет отображаться на панели управления (зависит от того, был ли CPL уже загружен или нет). Оболочка не знает, что вы внесли изменение, и она не запрашивает значение - вы должны сказать ей выйти и перечитать. Как это сделать, описано в MSDN (в основном вы устанавливаете именованное системное событие).
RegSetValueEx возвращает описательный код ошибки. Вы можете получить удобочитаемое сообщение из этого кода ошибки, используя FormatMessage и, возможно, через инструмент поиска ошибок или средство @ERR в VS. Код, который у вас есть, выглядит правильно, поэтому посмотрите, что говорит вам сообщение об ошибке.
Предполагая, что вы ищете с RegEdit, вы обновили (F5) представление реестра?