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
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
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