2008-10-29 4 views
2

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

Спасибо!

ответ

7

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

1: RegSetValueEx не принимает путь, только VALUENAME. Поэтому вам нужно сначала открыть ключ.

например.

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

1

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

0

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

1

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