Вопрос

Я хочу изменить значения реестра на карманном компьютере.Я запустил следующий код:

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;
}

но это не меняет запись реестра.Кто-нибудь знает, как установить значения ключей реестра с помощью С++?

Спасибо!

Это было полезно?

Решение

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

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

Другие советы

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

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

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

[1]: http://www.voscorp.com/products/developer/winmobile/voregistry/index.htm VORрегистрация

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top