1 (изменено: Slav, 2011-07-06 17:53:41)

Тема: VBS: как запретить параметр, сохранив его значение?

Добрый день, коллеги.

Итак, имеем IE8:
Сервис - Свойства обозревателя - Подключения - Настройка сети.

В открывшемся окне видим, в частности чекбокс Использовать сценарий автоматической настройки и под ним строковый параметр Адрес.

Для дальнейших экспериментов - если строка Адрес пустая - нужно что-то в неё ввести, например совершенно безобидный параметр:
http://localhost:0/proxy.pac
Очевидно, что перед этим необходимо поставить галку в чекбоксе Использовать сценарий автоматической настройки .

Теперь Вы легко можете убедиться, что выставляя или снимая галку в чекбоксе Использовать сценарий автоматической настройки , строковый параметр Адрес становится активным или "серым".
Но! При этом записанное в него значение сохраняется.
Можно выходить, снова входить в IE - значение все равно сохраняется, даже если чекбокс не отмечен.

За значение этого параметра отвечает параметр реестра:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings - AutoConfigURL

Заковыка в том, что в этом параметре как раз и хранится введенная строка.
Перерыл весь ИНЕТ - никак не могу понять, как манипулировать именно чекбоксом?
Как "снять галочку" - но сохранить строковое значение адреса?

Везде один совет - установить AutoConfigURL пустой строкой.
Но я так не хочу делать - тогда я теряю значение.
Как мне сделать в скрипте то же самое, что я легко делаю руками - снимаю галочку, сохраняя значение адреса?

Сам скрипт прост - секрет где-то в реестре:

  DIM sKey, sValue, strValue 
  Dim oReg 

  Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  
  Const HKCU = &H80000001 
  
' AutoConfig
  sKey   = "Software\Microsoft\Windows\CurrentVersion\Internet Settings"
  sValue = "AutoConfigURL"
  strValue = ""
  oReg.SetStringValue HKCU, sKey, sValue, strValue
'  oReg.DeleteValue HKCU, sKey, sValue

  WScript.Quit 0

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

2

Re: VBS: как запретить параметр, сохранив его значение?

Предлагаю отследить изменения состояния реестра с установленной и снятой вручную галочки, т.е. похоже, что в реестре есть еще некий параметр, работающий "в паре" с хранящим строку. Можете, например, использовать regmon.exe от Sysinternals Марка Руссиновича.

WBR. Roman

3

Re: VBS: как запретить параметр, сохранив его значение?

Rom5 пишет:

Предлагаю отследить изменения состояния реестра с установленной и снятой вручную галочки, т.е. похоже, что в реестре есть еще некий параметр, работающий "в паре" с хранящим строку. Можете, например, использовать regmon.exe от Sysinternals Марка Руссиновича.

Rom5,

то, что я вижу - объяснить не могу.
При снятой галочке текстового содержимого Адреса в реестре просто нет!
Вот так: в сером поле в диалоговом окне я его вижу, а поиск по реестру дает нулевой результат.

Предварительный вывод: это значение на самом деле хранится где-то в другом месте.
Но где?

4

Re: VBS: как запретить параметр, сохранив его значение?

Я скажу даже большее...
У меня в XP SP3 (IE8) параметр AutoConfigURL не имеется по указанному адресу. Но с помощью продвинутого редактора реестра нашёлся адрес ссылки на прокси, который сохраняется в бинарном параметре DefaultConnectionSettings по адресу HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections
Начал изучение... и опытным путём получил вот такие данные.

Параметр содержащий тестовый адрес с включённой галочкой:

46 00 00 00 55 00 00 00 05 00 00 00 00 00 00 00
00 00 00 00 1C 00 00 00 68 74 74 70 3A 2F 2F 6C
6F 63 61 6C 68 6F 73 74 3A 30 2F 70 72 6F 78 79
2E 70 61 63 00 00 00 00 00 00 00 00 C0 76 A9 66
B7 AE C9 01 03 00 00 00 C3 07 02 7F C0 A8 66 01
C0 A8 D9 01 00 00 00 00 00 00 00 00 01 00 00 00
02 00 00 00 C0 A8 01 78 00 00 00 00 00 00 00 00
60 94 00 68 38 96 00 68 22 9A 00 68 24 BA 00 68
8A BF 00 68 8E 6C 00 68 00 71 00 68 BA 74 00 68
56 7E 00 68 A0 7F 00 68 D1 82 00 68 22 DA 00 68
0A DF 00 68 A7 D7 00 68 62 95 00 68 6D 9E 00 68
9C 9F 00 68 6F A5 00 68 91 C8 00 68 00 00 00 00
AE AA 00 68 2E 85 00 68 00 00 00 00 00 00 00 68
D4 12 4D E3 00 00 00 00 01 00 00 00 00 00 00 00
Параметр содержащий тестовый адрес с снятой галочкой:

46 00 00 00 56 00 00 00 01 00 00 00 00 00 00 00
00 00 00 00 1C 00 00 00 68 74 74 70 3A 2F 2F 6C
6F 63 61 6C 68 6F 73 74 3A 30 2F 70 72 6F 78 79
2E 70 61 63 00 00 00 00 00 00 00 00 C0 76 A9 66
B7 AE C9 01 03 00 00 00 C3 07 02 7F C0 A8 66 01
C0 A8 D9 01 00 00 00 00 00 00 00 00 01 00 00 00
02 00 00 00 C0 A8 01 78 00 00 00 00 00 00 00 00
60 94 00 68 38 96 00 68 22 9A 00 68 24 BA 00 68
8A BF 00 68 8E 6C 00 68 00 71 00 68 BA 74 00 68
56 7E 00 68 A0 7F 00 68 D1 82 00 68 22 DA 00 68
0A DF 00 68 A7 D7 00 68 62 95 00 68 6D 9E 00 68
9C 9F 00 68 6F A5 00 68 91 C8 00 68 00 00 00 00
AE AA 00 68 2E 85 00 68 00 00 00 00 00 00 00 68
D4 12 4D E3 00 00 00 00 01 00 00 00 00 00 00 00

Отличия только в двух байтах:
    46 00 00 00 55 00 00 00 05 00 00 00 00 00 00 00
    46 00 00 00 56 00 00 00 01 00 00 00 00 00 00 00
Как вариант, импортировать заточенные данные в реестр скриптом, или же вкурить формат формирования бинарного формата
Ну может у меня данная особенность, но параметра AutoConfigURL нету