![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обновить значение реестра программно [D6, WinXP]
Delphi5.01 © (2006-03-25 10:18:00)Здравствуйте,
Вот возник такой вопрос, есть следующий код
procedure TChangeProxy.setProxyIE;
var
myReg: TRegistry;
begin
myReg := TRegistry.Create;
myReg.RootKey := HKEY_CURRENT_USER;
myReg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Internet Settings\', False);
...
//Set proxy server
myReg.WriteString('ProxyServer', proxyServer);
//Enable proxy usage
myReg.WriteInteger('ProxyEnable', 1);
...
myReg.Free;
end;
который обновляет данные IE, но как известно они входят в силу или после рестарта или если в regedit-е нажать кнопку F5, проверил практично для уверенности Так вот вопрос, как можно это сделать прогрмно? Так как перезагружать комп после каждой смены данных, таких как домашняя страница, прокси и т.д. довольно нерационально
Заранее благодарен
Delphi5.01 (2006-04-06 15:55:00) [1]Вопрос вдогонку, вот возникла теперь немного другого плана проблема, настройки оперы храниться в ini файле, как после изменений заставить браузер их обновить (прочесть), как только выключаю + включаю прогу все обновляется
Заранее благодарен за помощь
докопался до WM_SETTINGCHANGE но не помогло :-(
Delphi5.01 (2006-04-01 05:48:00) [2]Andy BitOff
Огромное вам спасибо, ваша идея наталкнула на поиски в интеренете и я нашел довольно полезныую сатью
Вот рабочий пример:
Uses WinInet;
InternetSetOption(0,INTERNET_OPTION_SETTINGS_CHANGED,0,0);
Большое вам спасио за помощь, а если заинтересует вот ссылки на документацию:
http://www.gnegg.ch/archives/responding_to_searchstrings_ii.html
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetsetoption.asp
Andy BitOff (2006-03-30 14:38:00) [3]Вы передаете не верную строку. Это можно было узнать проанализировав возвращаемое значение. Передавать нужно полный путь.
SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(PChar('HKEY _CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings')));
И без последнего слеша.
Delphi5.01 (2006-03-30 06:57:00) [4]Вот эту, если что неправильно то прошу извенить и указать правильную
Заранее благодарен
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(PChar('\Software\Microsoft\Windows\CurrentVersion\Internet Settings\')));
п.с. Думая что все происходит именно так как вы говорили так как все окна после вызова этой процедуры перерисовываються, а значит есть болшая вероятность что значения заного считываються.
Andy BitOff (2006-03-30 04:43:00) [5]Какую строку передаете в SendMessage(HWND_BROADCAST, WM_WININICHANGE...
Delphi5.01 (2006-03-29 22:47:00) [6]Офигел, блин даже это не помогло :-) Я уж думал это должно помочь, значит получаеться проблема не в том что проги должны считать а что система должна апдеитнуть файл регистра
Delphi5.01 (2006-03-29 22:26:00) [7]Спасибо обязательно попробую
п.с. Инет на 3 дня вырубили гады админы так что был как в джунглях вне цивилизации Админам как всегда спасибо за перемещение топика в нужную ветку.
Andy BitOff (2006-03-26 00:43:00) [8]Попробуйте сообщить системе, что ключ изменён и все приложения должны его перечитать.
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(PChar(Путь_к_ключу)));
Delphi5.01 (2006-03-25 23:56:00) [9]Ок тогда приведу пример:
1) Программно сменил значения прокси
2) Зашел в настройки ИЕ и что вижу там ничего не изменилось
3) Захожу в regedit и что вижу все значения поменяны
4) Нажимаю в regedit клавишу F5
5) Смотрю настройки ИЕ, все обновилось
Вот что происходит как я думаю, после того как значение некоего ключа обновились, они обновились толи в не оригинале толи наоборот, но одним словом реестр с которым работает ИЕ не обновился пока я не нажал F5 это факт. Вот и получается надо искусственно как то это замутить, как например рефрешнуть рабочий стол знаю (не помню но могу вспомнить) а вот как с регистром ...
Я раньше когда вручную фонты проинсталивал то требовал у пользователя рестартнуться, так как только после рестарта все прописывалось корректно, но и клавиша F5 делает кажется тоже самое
KSergey (2006-03-25 14:15:00) [10]Стоп. На лицо какая-то каша :)
Вы меняете значение ключа реестра - оно ТУТ ЖЕ туды и прописывается.
Онако, какая-либо программа, использующая это значение, вовсе не обязана тут же перечитывать его заново, после изменения.
Отсюда и получается, что изменение для некоторых параметров вступает в силу только после перезагрузки (просто Windows считывает эти параметры лишь один раз - при старте системы). Другие программы могут перечитывать эти значния только по определенному сигналу ("F5" для regedit, например).
Вот и все.