Scripts plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

для чтения реестра WSH.RegRead пользоваться неудобно
Ну так и не используйте его, да. У Вас есть oSys.Call("advapi32::RegOpenKeyEx"+_TCHAR) которые не порождают исключений, а только возвращают код ошибки.
И вообще, написать враппер вокруг нужной Вам функции, что-бы вело себя как нужно - не проблема совсем. Тем более что на JavaScript это в 100 крат удобнее чем на C.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre wrote:И вообще, написать враппер вокруг нужной Вам функции, что-бы вело себя как нужно - не проблема совсем. Тем более что на JavaScript это в 100 крат удобнее чем на C.
Оно-то да, но тягать из скрипта в скрипт эти функции мало приятного. Тем более, когда функционал уже имеется в плаге.


Спасибо за

Code: Select all

oSys.Call("advapi32::RegOpenKeyEx"+_TCHAR)
:D

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Оно-то да, но тягать из скрипта в скрипт эти функции мало приятного. Тем более, когда функционал уже имеется в плаге.
А така не судьба?

Code: Select all

//! Подключаем нужные наработки
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, там он тоже часто использует реестр.

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Исправлено: работа в AkelPad x64.

Fixed: work in AkelPad x64.


Scripts plugin v8.2

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

В стандартном скрипте Keyboard.js во всплывающем меню перепутаны пункты 3 (Строка->Stroka) и 4 (Stroka->Строка): на самом деле результат обратный.

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

DV
Исправлено.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

I guess that bad working AEM_GETPREVBREAK with AEWB_LEFTWORDEND.
Script:

Code: Select all

var hEditWnd = AkelPad.GetEditWnd();
var lpIndex  = AkelPad.MemAlloc(12);
var nOffset;
AkelPad.SetSel(-1, -1);
AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 3 /*AEGI_FIRSTSELCHAR*/, lpIndex);
AkelPad.SendMessage(hEditWnd, 3145 /*AEM_GETPREVBREAK*/, 0x00000002 /*AEWB_LEFTWORDEND*/, lpIndex);
nOffset = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
AkelPad.SetSel(nOffset, nOffset);
WScript.Echo(nOffset);
AkelPad.MemFree(lpIndex);
Test text1:

Code: Select all

a b
c
Test text2:

Code: Select all

a b
  c
In the first case the result is nOffset==1,
in the second case nOffset==3.

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »


Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Добавлено: метод 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.


Scripts plugin v8.3

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Thanks Instructor.
The test version is working properly.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Instructor wrote:Добавлено: метод AkelPad.Include. Метод аналогичен коду eval(AkelPad.ReadFile("...")), но позволяет выявлять место ошибки в добавляемом файле, если она присутствует.
Ур-р-ра, бляха-муха!!! :twisted: :twisted: :twisted: 8) *нету танцующих смайликов*

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

VladSh
Всё-равно приходится писать и использовать функцию типа

Code: Select all

function INCLUDE(lib)
{
   AkelPad.Include(AkelPad.GetAkelDir()+"\\Plugs\\Scripts\\"+lib);
}
И надо попробовать, работает ли оно с разнородными скриптами.

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

FeyFre
Откуда такая информация? Посмотрите пример в описании метода в Scripts-Rus.txt.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Instructor
(Да, я туда ещё не смотрел) Из текста обновления. Там фигурирует ReadFile. И был сделан вывод что нужно работать по тем же правилам.
Тогда вопрос: как мне достать файл лежащий не на диске, с которого запущен АР?
Относительные пути разрешаются относительно чего? Относительно положения скрипта? Или текущей рабочей папки? Или корневой папки АР?
WScript.ScriptBaseName для основного и вложенного скрипта один или разные?

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Метод аналогичен коду eval(AkelPad.ReadFile("...")), но позволяет выявлять место ошибки в добавляемом файле, если она присутствует.
Ой как бы его лучше перефразировать не используя eval(AkelPad.ReadFile("...")), ибо этот метод делает немного не то(или много не то, для тех кто разбирался в высоких материях стандарта ECMA262). И в некоторых случаях просто вызывает исключение в скрипте.
Ну что-бы не быть голословным, даю пример:

Code: Select all

//! Создадим некий объект
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());

Code: Select all

//! Финт ушами. Полностью легальный. Присвоить записи secret_data текущего окружения новое значение.
this.secret_data = "included";


Если делать по старому (VARIANT 2) делает всё как и ожидали
Если делать по новому (VARIANT 1) получаем RunTime error.

ЗЫ: я не слишком знаю какую именно версую спецификации реализовал MS в движке JScript 5.7.6002.22145(XP SP3, IE7), а какую в 5.8, но думаю там ещё больше вылезет не ожидаемых багов.
Post Reply