Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

Обновить значение реестра программно   Найти похожие ветки 

 
Delphi5.01 ©   (2006-03-25 10:18) [0]

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


 
KSergey ©   (2006-03-25 14:15) [1]

Стоп. На лицо какая-то каша :)
Вы меняете значение ключа реестра - оно ТУТ ЖЕ туды и прописывается.
Онако, какая-либо программа, использующая это значение, вовсе не обязана тут же перечитывать его заново, после изменения.
Отсюда и получается, что изменение для некоторых параметров вступает в силу только после перезагрузки (просто Windows считывает эти параметры лишь один раз - при старте системы). Другие программы могут перечитывать эти значния только по определенному сигналу ("F5" для regedit, например).

Вот и все.


 
Delphi5.01 ©   (2006-03-25 23:56) [2]

Ок тогда приведу пример:

1) Программно сменил значения прокси
2) Зашел в настройки ИЕ и что вижу там ничего не изменилось
3) Захожу в regedit  и что вижу все значения поменяны
4) Нажимаю в regedit клавишу F5
5) Смотрю настройки ИЕ, все обновилось

Вот что происходит как я думаю, после того как значение некоего ключа обновились, они обновились толи в не оригинале толи наоборот, но одним словом реестр с которым работает ИЕ не обновился пока я не нажал F5 это факт. Вот и получается надо искусственно как то это замутить, как например рефрешнуть рабочий стол знаю (не помню но могу вспомнить) а вот как с регистром ...

Я раньше когда вручную фонты проинсталивал то требовал у пользователя рестартнуться, так как только после рестарта все прописывалось корректно, но и клавиша F5 делает кажется тоже самое


 
Andy BitOff ©   (2006-03-26 00:43) [3]

Попробуйте сообщить системе, что ключ изменён и все приложения должны его перечитать.

SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(PChar(Путь_к_ключу)));


 
Delphi5.01 ©   (2006-03-29 22:26) [4]

Спасибо обязательно попробую
п.с. Инет на 3 дня вырубили гады админы так что был как в джунглях вне цивилизации Админам как всегда спасибо за перемещение топика в нужную ветку.


 
Delphi5.01 ©   (2006-03-29 22:47) [5]

Офигел, блин даже это не помогло :-) Я уж думал это должно помочь, значит получаеться проблема не в том что проги должны считать а что система должна апдеитнуть файл регистра


 
Andy BitOff ©   (2006-03-30 04:43) [6]

Какую строку передаете в SendMessage(HWND_BROADCAST, WM_WININICHANGE...


 
Delphi5.01 ©   (2006-03-30 06:57) [7]

Вот эту, если что неправильно то прошу извенить и указать правильную
Заранее благодарен
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(PChar("\Software\Microsoft\Windows\CurrentVersion\Internet Settings\")));

п.с. Думая что все происходит именно так как вы говорили так как все окна после вызова этой процедуры перерисовываються, а значит есть болшая вероятность что значения заного считываються.


 
Andy BitOff ©   (2006-03-30 14:38) [8]

Вы передаете не верную строку. Это можно было узнать проанализировав возвращаемое значение. Передавать нужно полный путь.
SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(PChar("HKEY _CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings")));
И без последнего слеша.


 
Delphi5.01 ©   (2006-04-01 05:48) [9]

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


 
Delphi5.01 ©   (2006-04-06 15:55) [10]

Вопрос вдогонку, вот возникла теперь немного другого плана проблема, настройки оперы храниться в ini файле, как после изменений заставить браузер их обновить (прочесть), как только выключаю + включаю прогу все обновляется
Заранее благодарен за помощь
докопался до WM_SETTINGCHANGE но не помогло :-(



Страницы: 1 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
3-1138807330
Neo Trinitron
2006-02-01 18:22
2006.04.23
Поиск в поле CLOB (Oracle)


8-1121935386
asprofi
2005-07-21 12:43
2006.04.23
Как осущесвить перемотку видео без торможения движка DSPack ?


11-1124775516
Дмитрий Пырин
2005-08-23 09:38
2006.04.23
Адаптация D2005 для KOL&MCK


2-1143271095
Delphi5.01
2006-03-25 10:18
2006.04.23
Обновить значение реестра программно


15-1143796937
Интересующийся
2006-03-31 13:22
2006.04.23
Мастер и Маргарита