для чтения реестра WSH.RegRead пользоваться неудобно
Ну так и не используйте его, да. У Вас есть oSys.Call("advapi32::RegOpenKeyEx"+_TCHAR) которые не порождают исключений, а только возвращают код ошибки.
И вообще, написать враппер вокруг нужной Вам функции, что-бы вело себя как нужно - не проблема совсем. Тем более что на JavaScript это в 100 крат удобнее чем на C.
FeyFre wrote:И вообще, написать враппер вокруг нужной Вам функции, что-бы вело себя как нужно - не проблема совсем. Тем более что на JavaScript это в 100 крат удобнее чем на C.
Оно-то да, но тягать из скрипта в скрипт эти функции мало приятного. Тем более, когда функционал уже имеется в плаге.
//! Подключаем нужные наработки
INCLUDE("lib\\RegsitryWorker.js");
INCLUDE("lib\\IniWorker.js");
INCLUDE("lib\\каой-нибудь-другой-файл-с-наработками.js");
///
/// Делаем всё что нам нужно.
///
//! Где-то в конце файла
function INCLUDE(scr)
{
eval(AkelPad.ReadFile(AkelPad.GetAkelDir(5/*ADTYPE_SCRIPTS*/)+"\\"+scr));
}
Я так и делал в своём скрипте SetCoderExt.js можете убедится.
Незачто, чаще читайте MSDN. Кстати, поройдитесь в скриптах KDJ, там он тоже часто использует реестр.
Добавлено: метод AkelPad.Include. Метод аналогичен коду eval(AkelPad.ReadFile("...")), но позволяет выявлять место ошибки в добавляемом файле, если она присутствует.
Added: method AkelPad.Include. Method is the same as code eval(AkelPad.ReadFile("...")), but allow to detect error placement in include file, if error appear.
Instructor wrote:Добавлено: метод AkelPad.Include. Метод аналогичен коду eval(AkelPad.ReadFile("...")), но позволяет выявлять место ошибки в добавляемом файле, если она присутствует.
Instructor
(Да, я туда ещё не смотрел) Из текста обновления. Там фигурирует ReadFile. И был сделан вывод что нужно работать по тем же правилам.
Тогда вопрос: как мне достать файл лежащий не на диске, с которого запущен АР?
Относительные пути разрешаются относительно чего? Относительно положения скрипта? Или текущей рабочей папки? Или корневой папки АР?
WScript.ScriptBaseName для основного и вложенного скрипта один или разные?
Метод аналогичен коду eval(AkelPad.ReadFile("...")), но позволяет выявлять место ошибки в добавляемом файле, если она присутствует.
Ой как бы его лучше перефразировать не используя eval(AkelPad.ReadFile("...")), ибо этот метод делает немного не то(или много не то, для тех кто разбирался в высоких материях стандарта ECMA262). И в некоторых случаях просто вызывает исключение в скрипте.
Ну что-бы не быть голословным, даю пример:
//! Создадим некий объект
function OOO(init)
{
this.secret_data = init;
this.getsecretdata = function(){return this.secret_data;};
/// VARIANT 1 используем новый метод
AkelPad.Include("included.js");
/// VARIANT 2 по старому, эквивалентно прямому вызову eval("текст кода")
///eval(AkelPad.ReadFile(AkelPad.GetAkelDir(5/*ADTYPE_SCRIPTS*/)+"\\Include\\included.js"));
return this;
}
//! создали экземпляр объекта
var temp = new OOO("lalala");
//! Вызвали метод возвращающий значение поля
WScript.Echo(temp.getsecretdata());
//! Финт ушами. Полностью легальный. Присвоить записи secret_data текущего окружения новое значение.
this.secret_data = "included";
Если делать по старому (VARIANT 2) делает всё как и ожидали
Если делать по новому (VARIANT 1) получаем RunTime error.
ЗЫ: я не слишком знаю какую именно версую спецификации реализовал MS в движке JScript 5.7.6002.22145(XP SP3, IE7), а какую в 5.8, но думаю там ещё больше вылезет не ожидаемых багов.