Главная страница
    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.47 MB
Время: 0.013 c
2-1144563094
DimDim
2006-04-09 10:11
2006.04.23
Как заблокировать отдельные пункты в ComboBox?


3-1141450048
-САша-
2006-03-04 08:27
2006.04.23
Delphi with fbclient.dll


3-1140741494
Rodelim
2006-02-24 03:38
2006.04.23
Внешние таблицы для ACCESS


2-1144242185
Hitriy
2006-04-05 17:03
2006.04.23
помогите кто чем может с работой в буфере


6-1136885549
GuAV
2006-01-10 12:32
2006.04.23
Вопрос по Demos Internet NetChat





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский