Изменить значения реестра - PullRequest
2 голосов
/ 29 октября 2008

Я хочу изменить значения реестра на 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 ]

7 голосов
/ 30 октября 2008

Есть две проблемы с тем, что вы делаете:

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, если пользователь ответит «да» на вопрос неизвестного издателя при первом запуске или установке приложения. Если вы получили сообщение об ошибке «Отказано в доступе» на устройстве, то вам действительно нужно иметь привилегированный код, подписанный для работы устройства.

1 голос
/ 30 октября 2008

Проверьте [VORegistry] [1], это значительно упрощает работу с реестром.

[1]: http://www.voscorp.com/products/developer/winmobile/voregistry/index.htm VORegistry

1 голос
/ 29 октября 2008

Как вы проверяете изменения? Имейте в виду, что внесение этого изменения не будет автоматически отражаться в поведении устройства и, вероятно, не будет отображаться на панели управления (зависит от того, загружен ли CPL или нет). Оболочка не знает, что вы внесли изменения, и она не запрашивает значение - вы должны сказать ей выйти и перечитать. Как это сделать задокументировано в MSDN (в основном вы устанавливаете именованное системное событие).

1 голос
/ 29 октября 2008

RegSetValueEx возвращает описательный код ошибки. Вы можете получить удобочитаемое сообщение из этого кода ошибки, используя FormatMessage и, возможно, с помощью инструмента поиска ошибок или средства @ERR в VS. Код, который у вас есть, выглядит правильно, поэтому посмотрите, что говорит вам сообщение об ошибке.

0 голосов
/ 29 октября 2008

Предполагая, что вы ищете RegEdit, обновили ли вы (F5) представление реестра?

...