Меняю значение реестра (типа List separator) с помощю API функций:
RegOpenKey
RegSetValueEx
RegCloseKey
значение меняется, но.... при дальнейшем его использовании в проге вылазит старое значение Новое же вступает в силу, только после тупого нажатия кнопки Apply в Control Panel
Вопрос: что я делаю не так? как програмно заставить изменения вступить в силу?
Здравствуйте, kuzama, Вы писали:
K>Меняю значение реестра (типа List separator) с помощю API функций: K>RegOpenKey K>RegSetValueEx K>RegCloseKey K>значение меняется, но.... при дальнейшем его использовании в проге вылазит старое значение Новое же вступает в силу, только после тупого нажатия кнопки Apply в Control Panel K>Вопрос: что я делаю не так? как програмно заставить изменения вступить в силу?
Здравствуйте, ioni, Вы писали:
I>Здравствуйте, kuzama, Вы писали:
K>>Меняю значение реестра (типа List separator) с помощю API функций: K>>RegOpenKey K>>RegSetValueEx K>>RegCloseKey K>>значение меняется, но.... при дальнейшем его использовании в проге вылазит старое значение Новое же вступает в силу, только после тупого нажатия кнопки Apply в Control Panel K>>Вопрос: что я делаю не так? как програмно заставить изменения вступить в силу?
I>а RegFlushKey не пробовол вызывать
А то как же, и это тоже пробовал.
Может я не совсем точно выразился. Мои изменеия вступают в силу либо после перезагрузки, либо путем захода в Панель управления — Региональные настройки и нажатия княпки Применить. А мне нужно сразу, т.к. от этих изменеий зависит корректность работы программы.
Здравствуйте, kuzama, Вы писали:
K>Здравствуйте, ioni, Вы писали:
I>>Здравствуйте, kuzama, Вы писали:
K>>>Меняю значение реестра (типа List separator) с помощю API функций: K>>>RegOpenKey K>>>RegSetValueEx K>>>RegCloseKey K>>>значение меняется, но.... при дальнейшем его использовании в проге вылазит старое значение Новое же вступает в силу, только после тупого нажатия кнопки Apply в Control Panel K>>>Вопрос: что я делаю не так? как програмно заставить изменения вступить в силу?
I>>а RegFlushKey не пробовол вызывать
K>А то как же, и это тоже пробовал. K>Может я не совсем точно выразился. Мои изменеия вступают в силу либо после перезагрузки, либо путем захода в Панель управления — Региональные настройки и нажатия княпки Применить. А мне нужно сразу, т.к. от этих изменеий зависит корректность работы программы.
Вы пишете в реестр что-то, относящееся к региональным настройкам? Если так, то, может, стоит взглянуть на функцию SystemParametersInfo(). Не уверен, конечно, но...
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, kuzama, Вы писали:
K>>Здравствуйте, ioni, Вы писали:
I>>>Здравствуйте, kuzama, Вы писали:
K>>>>Меняю значение реестра (типа List separator) с помощю API функций: K>>>>RegOpenKey K>>>>RegSetValueEx K>>>>RegCloseKey K>>>>значение меняется, но.... при дальнейшем его использовании в проге вылазит старое значение Новое же вступает в силу, только после тупого нажатия кнопки Apply в Control Panel K>>>>Вопрос: что я делаю не так? как програмно заставить изменения вступить в силу?
I>>>а RegFlushKey не пробовол вызывать
K>>А то как же, и это тоже пробовал. K>>Может я не совсем точно выразился. Мои изменеия вступают в силу либо после перезагрузки, либо путем захода в Панель управления — Региональные настройки и нажатия княпки Применить. А мне нужно сразу, т.к. от этих изменеий зависит корректность работы программы.
SDB>Вы пишете в реестр что-то, относящееся к региональным настройкам? Если так, то, может, стоит взглянуть на функцию SystemParametersInfo(). Не уверен, конечно, но...
Ага к региональным, а именно меняю значение List separator для создания текстового файла нужного мне формата. SystemParametersInfo() к сожалению не падходит.
Re[5]: Обновление реестра
От:
Аноним
Дата:
15.07.03 15:20
Оценка:
Понятно что проблемма не с регистром. Где то просто эти значения в системе скешированы. И надо оповестить систему чтоб она их считала по новой после того как реест подправлен.
Это и делает Apply.
Посмотри SetLocaleInfo.
George.
K>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>Здравствуйте, kuzama, Вы писали:
K>>>Здравствуйте, ioni, Вы писали:
I>>>>Здравствуйте, kuzama, Вы писали:
K>>>>>Меняю значение реестра (типа List separator) с помощю API функций: K>>>>>RegOpenKey K>>>>>RegSetValueEx K>>>>>RegCloseKey K>>>>>значение меняется, но.... при дальнейшем его использовании в проге вылазит старое значение Новое же вступает в силу, только после тупого нажатия кнопки Apply в Control Panel K>>>>>Вопрос: что я делаю не так? как програмно заставить изменения вступить в силу?
А>Понятно что проблемма не с регистром. Где то просто эти значения в системе скешированы. И надо оповестить систему чтоб она их считала по новой после того как реест подправлен. А>Это и делает Apply.
А>Посмотри SetLocaleInfo.
А>George.
K>>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>>Здравствуйте, kuzama, Вы писали:
K>>>>Здравствуйте, ioni, Вы писали:
I>>>>>Здравствуйте, kuzama, Вы писали:
K>>>>>>Меняю значение реестра (типа List separator) с помощю API функций: K>>>>>>RegOpenKey K>>>>>>RegSetValueEx K>>>>>>RegCloseKey K>>>>>>значение меняется, но.... при дальнейшем его использовании в проге вылазит старое значение Новое же вступает в силу, только после тупого нажатия кнопки Apply в Control Panel K>>>>>>Вопрос: что я делаю не так? как програмно заставить изменения вступить в силу?
SetLocaleInfo(GetSystemDefaultLCID(), LOCALE_SLIST, "^") // значение поменялось
PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0 // послал соответствующее сообщение
.... и все равно потом вылазит старое значение! Может я что с посылом сообщения намудрил?