Тема: Zinc FAQ
Показать сообщение отдельно
Старый 27.11.2007, 23:37
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 7  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Работа с реестром

C именованием методов цинка наблюдается путаница. Внесем некоторую ясность.
Папки в левой панели редактора реестра regedit - разделы (или ветки 'branches').
Методы mdm.System.Registry.createKey, .getKeyNames и .deleteKey воздействуют именно на разделы.
Далее, в правой панели regedit'a отображаются ключи: название, тип, значение, которые в данном разделе присутствуют.
на пример
Код:
var login:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultUserName");
в качестве последнего аргумента принимает имя ключа в данном разделе, а возвращает его значение.
То же относится и к .saveString(), который принимает аргументами ветку, имя ключа, значение.
С удалением раздела (ветки) нет проблем. Но вот с удалением ключа или его значения - непонтно.
Метод deleteValue() не работает. Да и принимает он, судя по мануалу просто ветку, имя ключа туда не вставляется.
Видимо, это косяк. Здесь

http://www.mdmforum.com/forum/index....hl=deletevalue

изложена пара достойных идей как этот косяк спрямить.
В частности, осбого внимания заслуживает использование утилиты редактирования реестра из командной строки REG DELETE.
Код:
var cmdExe = "REG DELETE раздел /v ключ";
var results = mdm.System.execStdOut(cmdExe);
mdm.Dialogs.prompt(results);
Для получения справки по утилите запустите cmd и набейте reg delete /? или reg query /?
Да, еще. Методы .load() и .save() облегченный вариант всех прочих. В том смысле , что они воздействуют на определенную ветку в реестре, и ее не надо им указывать, ветка эта формируется при первом вызове .save(), точное ее местоположение огрворено в мануале: HKEY_CURRENT_USER\Software\<название формы приложения>\ .
пример
Код:
go.onRelease = function() {
	mdm.System.Registry.save("myKey", "This is my Content");// записали в ключ 'myKey' значение 'This is my Content'
	var Result = mdm.System.Registry.load("MyKey");// считали только что записанное значение  
	mdm.Dialogs.prompt(Result);
};
Как упоминалось в примерах по VBScript, этот инструмент можно так же использовать для работы с реестром, т.к.
возможности vb-скрипта это позволяют.
А вот так можно получить имя текущего пользователя и домена на WinXP

Код:
var login:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultUserName");
var domain:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultDomainName");
// for winXP registry
Однако такой способ не сработает, если выполнена команда "Запуск от имени...", считаются все равно имя и домен именно текущего пользователя.
Для корректной работы лучше использовать WSH-скрипт.
Код:
// "голый" WSH-скрипт для работы с реестром может выглядеть так
Set Sh = CreateObject("WScript.Shell")
key =  "HKEY_CURRENT_USER\"
Sh.RegWrite key & "WSHTest\", "testkeydefault"
См. выше примеры.


Последний раз редактировалось alexcon314; 28.11.2007 в 22:21.