Scripts plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

FeyFre wrote:

Code: Select all

AkelPad.Library("library")
Не улавливаю смысла. Сейчас:
- Если эта dll ActiveX, то делается регистрация и ее загрузка с помощью ActiveXObject.
- Если эта dll не ActiveX, то делается вызов oSys.Call("lib.dll::Function") экпортируемой функции.

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

Post by FeyFre »

Если эта dll не ActiveX, то делается вызов oSys.Call("lib.dll::Function") экпортируемой функции.
1.Тогда в чем смысл AkelPad.SendMessage? Это ведь точная копия oSys.Call("user32::SendMessage"+_TCHAR)
2.Так:

Code: Select all

AkelPad.Library("my_user32_proxy")
my_user32_proxy.SetWindowText(hwnd, "Hello")
vs

Code: Select all

var oSys = AkelPad.SystemFunction();
var str = "Hello"
var mem = AkelPad.MemAlloc((str.length+1)*_TSIZE/*и не факт что хватит*/);
AkelPad.MemCopy(mem, str, _TSTR);
oSys.Call("user32::Sleep",hwnd,mem);
AkelPad.MemFree(mem);
3. Доступ к кое-какому API я уже третий раз пытаюсь сделать - не получается. Получается такая трудночитаемая простыня, что я сразу его тру с концами.
Если эта dll ActiveX, то делается регистрация и ее загрузка с помощью ActiveXObject.
А вот из AkelPad-а делать второй IE я не стал бы.
И по моему проще написать одну функцию

Code: Select all

const EXPORTED_SYMBOL_STRUCT* WINAPI __declspec(dllexport) GetSymbols(const AKELPAD_SITE* pSite);
чем реализовать ActiveX объект(даже учитывая всевозможные фреймворки типа ATL). Я лично предпочитаю не связываться с COM без крайней необходимости.

ЗЫ: А в скрипте создать поток(oSys.Call("kernel32::CreateThread")) у меня вообще не получилось, а если и создался, то дождаться его используя WFSO не получалось ни разу. Может это потому что g_CurSysCallback->objFunction->lpVtbl->Invoke всегда выполняется в одном и том же потоке?

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

Post by Instructor »

FeyFre
1.Тогда в чем смысл AkelPad.SendMessage?
Он появился раньше :)
2. Если вместо Sleep имеется ввиду SetWindowText, то с версии 7.0 можно вызывать так:

Code: Select all

oSys.Call("user32::SetWindowText" + _TCHAR, hwnd, "Hello");
oSys.Call("kernel32::CreateThread")
Для чего создавать поток, если каждый скрипт итак запускается в отдельном потоке?

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

Post by FeyFre »

Если вместо Sleep имеется ввиду SetWindowText
ага. Это я автоподстановку недофиксил.
Оно то можно, но это покрывает только случай аргумента типа LPCTSTR. А как же другие?(Некоторые функции имею только A или W варианты) А с API структурами работа - мучение(а когда переехали на х64 - вдвойне стало). А WINAPI константы - это полный трындец.
Для чего создавать поток, если каждый скрипт итак запускается в отдельном потоке?
В одном потоке гуй, второй поток - делает задачу. И гуй не замерзает потому что задача не прокачивает user32 очередь.

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

Post by FeyFre »

Пишу сюда, хотя формально хотелка не к плагину а к редактору(точнее к автору).
В файлы AkelDll.h, AkelEdit.h внести такие изменения:
у деклараций структур, для каждого их поля, где-то сбоку в комментарие поставить их смещение в байтах от начала структуры. Желательно для обоих архитектур.
Зачем и как это касается этого плагина?
Ответ: часто скрипами приходится получать какую-нибудь структуру редатктора, и читать оттуда что-то, или писать туда. Ну для этого нужно знать где именно в памяти лежит это поле. И не всегда сходу определишь(выравнивание + архитектура + вложенность структур). А так посмотрим на исходник, и вспомнили всё. И в случае изменений Инструктор на ходу сможет легко вносить правки смещений, а кто-то для себя каждый раз сбиваться заново.
Вот.

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

Post by VladSh »

Instructor
WScript.Echo() выводит в заголовке имя текущего скрипта..
Сделайте пожалуйста, чтобы при записи

Code: Select all

AkelPad.MessageBox(AkelPad.GetMainWnd(), "Text",, 0 /*MB_OK*/);
т.е. при неуказанном 3-м параметре было то же самое.

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

Post by FeyFre »

VladSh
ECMA262 не позволяет не указать промежуточный параметр. Это только VB позволяет такой финт(по сути там декларация с аргументом по-умолчанию) - финт языка.

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

Post by VladSh »

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

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

Post by FeyFre »

VladSh
Обычно если передают пустоту, то её и хотят увидеть. И даже если передают NULL(0) это значение аргумента тоже документировано в WINAPI.

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

Post by VladSh »

FeyFre
А undefined :)

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

Post by FeyFre »

Как господа скриптописатели смотрят на то, что-бы метод GetMainWnd() заменить на константу MAINWND?

По сути, возвращаемое GetMainWnd значение никогда не изменится во время жизни скрипта, более того оно постоянно в пределах работы самого АП. По сути это же значение такой же природы что и _TCHAR, _TSIZE, _TSTR.

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

Post by VladSh »

FeyFre wrote:Как господа скриптописатели смотрят на то, что-бы метод GetMainWnd() заменить на константу MAINWND?
Не принципиально.
Но чем меньше кнопать, тем лучше. Тогда WNDMAIN.

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

Post by FeyFre »

VladSh, не в кнопконажимательстве дело. AutoComplete и Templates сводят его к минимуму.

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

Post by VladSh »

FeyFre, и чем меньше кода, тем лучше; я это тоже имел ввиду.
А вообще это ерунда. Т.е. не то, из-за чего копья ломать. Сильно жить не мешает, и ладно.

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

Post by Instructor »

Добавлено: объект AkelPad.ScriptSettings() и его методы Begin, Read, Write, Delete, End.
Добавлено: метод WScript.ScriptBaseName.
Добавлено: поддержка вертикального выделения во второй параметр метода ReplaceSel.

Added: object AkelPad.ScriptSettings() and its methods Begin, Read, Write, Delete, End.
Added: method WScript.ScriptBaseName.
Added: column selection support for second parameter of ReplaceSel method.


Scripts plugin v8.0
Post Reply