Page 74 of 74

Re: Scripts plugin

Posted: Sun May 04, 2025 7:14 pm
by Instructor
Исправлено: остановка при ошибке и метод WScript.Quit в Windows 11 24H2 (jscript9Legacy.dll).

Fixed: stopping on error and WScript.Quit method in Windows 11 24H2 (jscript9Legacy.dll).


Scripts plugin v19.2

Re: Scripts plugin

Posted: Thu Aug 21, 2025 7:47 am
by Instructor
Исправлено: обходное решение для jscript9Legacy.dll, который игнорирует одиночный AddRef для объекта IDispatch в методе oSys.RegisterCallback.

Fixed: workaround for jscript9Legacy.dll that ignore single AddRef for IDispatch object in oSys.RegisterCallback method.


Scripts plugin v19.3

Re: Scripts plugin

Posted: Thu Nov 20, 2025 10:43 am
by VladSh
Instructor

Скрипт чтения настроек скрипта

Code: Select all

var oSet = AkelPad.ScriptSettings();
oSet.Begin(WScript.ScriptBaseName, 0x1 /*POB_READ*/);
var value = oSet.Read("param", 3 /*PO_STRING*/, "defaultString");
AkelPad.MessageBox(AkelPad.GetMainWnd(), value, WScript.ScriptName, 0 /*MB_OK*/);
oSet.End();
даёт ошибку в случае отсутствия ini-файла для скрипта (проверял на Win11):
---------------------------
Scripts plugin
---------------------------
Script: C:\Portable\AkelPad\AkelFiles\Plugs\Scripts\test.js
Line: 3
Symbol: 1
Error: Недостаточно памяти
Code: 800A0007
Source: Ошибка выполнения JavaScript
---------------------------
Да Нет
---------------------------
Если добавить пустой файл, то работает норм.

Думаю, нужно обработчик добавить на отсутствие файла, и возвращать значение по умолчанию в случае его отсутствия.

Re: Scripts plugin

Posted: Thu Nov 20, 2025 7:00 pm
by Infocatcher
VladSh wrote: Thu Nov 20, 2025 10:43 am Скрипт чтения настроек скрипта

Code: Select all

var oSet = AkelPad.ScriptSettings();
oSet.Begin(WScript.ScriptBaseName, 0x1 /*POB_READ*/);
var value = oSet.Read("param", 3 /*PO_STRING*/, "defaultString");
AkelPad.MessageBox(AkelPad.GetMainWnd(), value, WScript.ScriptName, 0 /*MB_OK*/);
oSet.End();
даёт ошибку в случае отсутствия ini-файла для скрипта
Так, вроде, так и задумано, в примере делается проверка возвращаемого oSet.Begin() значения:

Code: Select all

Пример (прочитать настройки скрипта):
  var oSet=AkelPad.ScriptSettings();

  if (oSet.Begin("", 0x1 /*POB_READ*/))
  {
    pString=oSet.Read("String", 3 /*PO_STRING*/);
    bMultiline=oSet.Read("Multiline", 1 /*PO_DWORD*/);
    oSet.End();
  }

Re: Scripts plugin

Posted: Thu Nov 20, 2025 7:48 pm
by VladSh
Infocatcher
Ясно.

Re: Scripts plugin

Posted: Thu Nov 20, 2025 7:53 pm
by VladSh
Instructor

El Sanchez написал:
ошибка в коде AkelPad здесь.
При nDataSize = 0, второй параметр SysAllocStringLen будет равен -1, но у функции тип этого параметра беззнаковый, и (UINT)-1 = 0xFFFFFFFF = 4294967295 байт.

Re: Scripts plugin

Posted: Sun Nov 23, 2025 6:48 pm
by Instructor
VladSh
См. Scripts v19.5

Re: Scripts plugin

Posted: Sun Nov 23, 2025 6:48 pm
by Instructor
Исправлено: AkelPad.ScriptSettings().Read ошибка выделения памяти при попытке чтения пустого дескриптора.

Fixed: AkelPad.ScriptSettings().Read memory allocation error when trying to read empty handle.


Scripts plugin v19.5

Re: Scripts plugin

Posted: Fri Mar 13, 2026 7:03 pm
by ewild
It is well known and documented how to run user scripts from the "AkelPad\AkelFiles\Plugs\Scripts" directory.

Then, is there a way (and how) to execute a user script that is designed for and currently being edited in the AkelPad, but located in an arbitrary place outside of AkelPad's dedicated tree?
It would be pretty useful to have such an option for testing, but I couldn't figure out how to do that.

For instance, I have tried "run currently edited.js" Call("Scripts::Main",1,"%f") ContextMenu command, but it adds "AkelPad\AkelFiles\Plugs\Scripts" to %f and fails.

The RunMe.js by DV looked very promising with a call like this: "runMe currently edited.js" Call("Scripts::Main", 1, "RunMe.js", "%f")
Unfortunately, it turned out, in its vanilla form, RunMe.js runs only the simplest scripts (those I can launch just from the Windows Explorer as well) and fails to execute more complex scripts (e.g., containing any of the AkelPad.* AkelPad's window related methods), and I couldn't elaborate on how to customize it for that task (if it's even possible).

So, essentially, how to run from AkelPad an AkelPad's user script that is currently being edited in AkelPad, with full support of AkelPad's functions/methods, as if it is located in "AkelPad\AkelFiles\Plugs\Scripts", even though it is located elsewhere?

Re: Scripts plugin

Posted: Sun Mar 15, 2026 11:51 am
by testuser2
ewild wrote: Fri Mar 13, 2026 7:03 pm Then, is there a way (and how) to execute a user script that is designed for and currently being edited in the AkelPad, but located in an arbitrary place outside of AkelPad's dedicated tree?
It would be pretty useful to have such an option for testing, but I couldn't figure out how to do that.
Я использую executeScript.js и executeScript.vbs из стаднартного набора скриптов для этого. Они создают врменные файлы для выполняемого кода в стандартной директории. Работает так: если выделяешь код, то выполняется только выделенный код, если ни чего не выделяешь, то выполняется весь код из активной вкладки.
Кнопки для панели инструментов:

Code: Select all

    "Execute JS-code" Call("Scripts::Main", 1, "executeScript.js") Icon("%a\AkelFiles\Plugs\ToolBar.dll", 17)
    "Execute VBS-code" Call("Scripts::Main", 1, "executeScript.vbs") Icon("%a\AkelFiles\Plugs\ToolBar.dll", 17)
Вообще вопросы по этому аддону лучше писать сюда.