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)
Вообще вопросы по этому аддону лучше писать сюда.

Two confirmation dialogs pop up when exiting AkelPad

Posted: Fri Mar 27, 2026 3:42 pm
by ncdntc
The following settings are present in akelpad.ini:

CmdLineBegin=/Call("Scripts::Main", 1, "LineBoardRClickPanel.js","LINEBOARDBOOKMARKS")

Additionally, the plugin exit.dll is used when exiting AkelPad.

Issue:
When Scripts.dll from version 18.6 calls LineBoardRClickPanel.js, an exit prompt dialog appears once upon exiting: ok!
When Scripts.dll from version 18.8 calls LineBoardRClickPanel.js, an exit prompt dialog appears twice upon exiting AkelPad: ERROR!
I have not found the corresponding Scripts.dll for versions 18.7, so I have not tested them.

If necessary, I can provide the complete code of LineBoardRClickPanel.js.

Supplement:
1. Tested the latest scripts.dll (V19.5), same error.
2. Tested other JS files; if the JS contains something like "AkelPad.WindowGetMessage()", scripts.dll remains resident in memory after being called, and the same error occurs when exiting AkelPad.
3. Compared scripts.c using diff:
--- Scripts_v18.6.c Wed Jun 01 17:55:40 2016
+++ Scripts_v18.8.c Fri Nov 16 06:06:22 2018

LRESULT CALLBACK NewMainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
- if (uMsg == WM_CLOSE)
+ if (uMsg == AKDN_MAIN_ONCLOSE_PREFINISH)
Perhaps this issue is related to this?

Re: Scripts plugin

Posted: Tue Mar 31, 2026 11:11 pm
by Instructor
ncdntc
See Exit plugin v4.6

Re: Scripts plugin

Posted: Tue Mar 31, 2026 11:25 pm
by Instructor
Добавлено: метод AkelPad.IsJScript9Legacy() — определить используется jscript9Legacy.dll или нет.
Исправлено: на x64, при копировании указателя строки в выделенную пользователем структуру, jscript9Legacy.dll изменяет этот указатель после возврата из AkelPad.MemCopy и структура становится испорченной (Windows 11).

Added: AkelPad.IsJScript9Legacy() method - detect jscript9Legacy.dll usage.
Fixed: on x64, when copying string pointer to allocated user structure, jscript9Legacy.dll modifies this pointer after AkelPad.MemCopy returns and structure became corrupt (Windows 11).


Scripts plugin v19.6

Re: Scripts plugin

Posted: Wed Apr 01, 2026 3:13 am
by ncdntc
Instructor wrote: Tue Mar 31, 2026 11:11 pm ncdntc
See Exit plugin v4.6
I tested scripts.dll (V19.6) + exit.dll (v4.6), and everything works fine. Thank you very much.

Re: Scripts plugin

Posted: Fri Apr 03, 2026 8:00 am
by Instructor
Изменено: теперь функции _PtrAdd, vbPtrAdd, _PtrMath, vbPtrMath вызывают исключение для значений типа double.

Changed: now _PtrAdd, vbPtrAdd, _PtrMath, vbPtrMath returns exception for double value.


Scripts plugin v19.7