Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.011 c
15-1143970869
antonn
2006-04-02 13:41
2006.04.23
Смешно


2-1144320701
half_litre
2006-04-06 14:51
2006.04.23
флаг Break on exception в Delphi 7


8-1132611988
VasRoG
2005-11-22 01:26
2006.04.23
TBitmap и StretchBlt


2-1144234255
Id
2006-04-05 14:50
2006.04.23
DBComboBox1.Style:=csDropDownList


2-1144581684
fuzzy
2006-04-09 15:21
2006.04.23
Как синхронизовать две StringGrid???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский