Page 46 of 97
Posted: Wed Dec 29, 2010 5:47 pm
by Infocatcher
Andrey_A_A
Так ведь множественное выделение вообще не поддерживается.
Posted: Wed Dec 29, 2010 6:23 pm
by KDJ
Andrey_A_A wrote:Подскажите как можно выделить определённые строки одновременно. К примеру мне нужно выделить 1, 7, 11, 22... строку с помощью скрипта...
In AkelPad is not possible to select multiple noncontiguous ranges.
This possibility is, for example in Notepad++.
But using a script in AkelPad you can to process needed rows sequentially.
Write, what you want to do with lines of numbers 1, 7, 11, 22. I'll try to help you.
Posted: Sat Jan 01, 2011 6:02 pm
by Infocatcher
getHash.js
Добавлена галочка для перевода в верхний регистр.
Posted: Sun Jan 02, 2011 12:53 pm
by KDJ
Changes in
FileInfo.js:
1. Fixed algorithm for calculating the number of words. Gives a result, such as Stats plugin.
2. Indexes of empty lines, that contain spaces or tabs, labeled "-empty".
3. If you selected a piece of text - gives statistics of selected text. If not selected - statistics throughout the text.
Posted: Sun Jan 02, 2011 3:52 pm
by Andrey_A_A
В скриптах используется команда
SendMessage(hHandle, nMessage, wParam, lParam);
Подскажите, где можно на русском языке прочитать подробную информацию о всех возможных сообщениях (командах), которые можно послать окну (nMessage) и их параметрах. Просто не до конца понятны выражения типа:
273 /*WM_COMMAND*/
3087 /*AEM_SETMODIFY*/
0x400, //LOCALE_USER_DEFAULT
...
в справке, в Scripts-Rus.txt я этого не нашёл.
Posted: Sun Jan 02, 2011 5:46 pm
by FeyFre
Andrey_A_A
SendMessage это просто упрощенный вызов AkelPad.SystemFunction().Call("user32::SendMessage"+_TCHAR, ....) т.е. работа в родном окружении ОС. Функция выполняет синхронную отправку сообщений указанному окну.
Взаимодействие программ с окнами в обеспечивается с помощью небольшого набора системных вызовов из модуля user32, в том числе с помощью т.н. оконных сообщений - дискретных запросов к так называемой оконной процедуре - подпрограмме которая целиком определяет поведение окна. Сообщение идентифицируется кодом(0-65535), а также двумя числовыми параметрами(условное обозначение wParam, lParam). Каждое окно имеет право обрабатывать сообщение собственным алгоритмом, не зависимо от других окон. И тем не менее, для унификации первые 1024 сообщения(0-1023) используются системой(служебные уведомления окнам), и каждое окно для обеспечения работоспособности обязано реагировать на них определенным образом(например, сообщение WM_NCDESTROY(130) последнее сообщение, которое получит окно перед самым его уничтожением, потому оконная процедура обязана освободить занятую в процессе существования окном память, если этого не сделала раньше).
Сообщения >1023 система не специфицирует и никогда не отправляет по собственно инициативе.
Если Вы новичек в программировании WIN32 то для начала Вам нужно бы познакомится у устройством ОС, например из книги Рихтера тут
http://alexsoft.home.nov.ru/prog/index.htm
Более конкретно о каждом системном сообщении сможете прочесть в MSDN(гуглить), а также там есть всё что нужно знать о стандартных окна(поля ввода, кнопки, списки, диалоги, меню, прочее).
О сообщениях AkelPad-а, и AkelEdit-а, вы можете подробно узнать из исходников AkelDll.h, AkelEdit.h(и с MSDN о совместимой с RichEdit части)
ЗЫ: Не рекомендую искать русскоязычные справки/учебники. Легче Вам от этого не станет. Разве что у Вас над головой будет стаять специалист.
Posted: Mon Jan 03, 2011 11:13 am
by Andrey_A_A
FeyFre большое спасибо за подробную информацию. Я понимаю что сразу всё не освоить. Я самообучаюсь, разбирая различные скрипты. Начал с vbs , и изначально я сделал собственную справку, куда вносил, и вношу новые освоенные функции, даже целые блоки скриптов, для дальнейшего использования, что позволяет быстро писать, беря нужные блоки. За 8 месяцев написано более 100 скриптов в основном для файловой с-мы в тотале... Появилась мысль оптимизировать AkelPad. Пишу, что-то получается что-то нет. Может кто-то из скринописателей для AkelPada тоже ведёт подобную справку, библиотеку функций, различных шаблонов на русском языке. Если поделитесь - это будет очень здорово.
Posted: Mon Jan 03, 2011 7:46 pm
by Infocatcher
Instructor wrote:Added: method ScriptNoMutex - allow other scripts running with this script at the same time.
Updated:
goToLongestLine.js
AESCrypt.js
converter.js
getHash.js
LinesFilter_mod2.js
Posted: Mon Jan 03, 2011 10:52 pm
by Infocatcher
Updated again.

Now second launch move focus to already opened dialog window, based on
SetCoderExt.js code.
Posted: Mon Jan 03, 2011 11:15 pm
by FeyFre
Infocatcher
Code: Select all
function findWindow(lpszClassName, hWndParent)
{
var memClass = AkelPad.MemAlloc((lpszClassName.length + 1)*_TSIZE);
if (!memClass)
return 0;
AkelPad.MemCopy(memClass, lpszClassName, _TSTR);
var hWnd = oSys.Call("user32::FindWindowEx" + _TCHAR, hWndParent || 0, 0, memClass, 0);
AkelPad.MemFree(memClass);
return hWnd;
}
Ооооочень плохая идея. Гляньте опять в мой скрипт. Я первым аргументом передаю главное окно, а у Вас только ноль. Это не правильно. FindWindowEx перебирает детей указанного родителя, и только прямых детей, а не всех потомков. В случае 0 - детей рабочего стола. Диалог же, который Вы пытаетесь найти - не дочерний рабочему столу, а дочерний главному окну акела. И найден не будет.(И даже если я ошибся, то вот второй пункт) Также если запущено два акела, и два таких скрипта с таким окном, то где Вы прочитали что будет найдено именно нужное Вам окно - принадлежащее тому Акелу, из которого его ищут?
Posted: Mon Jan 03, 2011 11:34 pm
by Infocatcher
FeyFre
Это понятно, но у меня ничего не вышло:
Code: Select all
var hWndDialog = findWindow(windowClass);
WScript.Echo(findWindow(windowClass, hMainWnd)); // Всегда 0
И в текущем виде работает. Все же это лучше, чем не делать при повторном запуске вообще ничего.
Видимо, что-то не так где-то здесь:
Code: Select all
hWndDialog = oSys.Call(
"user32::CreateWindowEx" + _TCHAR,
0, //dwExStyle
windowClass, //lpClassName
0, //lpWindowName
0x90CA0000, //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
0, //x
0, //y
420, //nWidth
360, //nHeight
hMainWnd, //hWndParent
0, //ID
hInstanceDLL, //hInstance
dialogCallback //Script function callback. To use it class must be registered by WindowRegisterClass.
);
, в hWndParent.
Posted: Tue Jan 04, 2011 12:26 pm
by FeyFre
Infocatcher
Это понятно, но у меня ничего не вышло:
oSys.GetLastError() всегда есть. Что он возвращает?
Posted: Tue Jan 04, 2011 1:41 pm
by FeyFre
SetCoderExt.js
Improved reaction on AkelPad shutdown sequence.
Posted: Tue Jan 04, 2011 4:05 pm
by Infocatcher
FeyFre wrote:oSys.GetLastError() всегда есть. Что он возвращает?
0 возвращает.
Оно и понятно:
окна.
Posted: Tue Jan 04, 2011 8:05 pm
by Infocatcher
FeyFre wrote:Также если запущено два акела, и два таких скрипта с таким окном, то где Вы прочитали что будет найдено именно нужное Вам окно - принадлежащее тому Акелу, из которого его ищут?
На первый взгляд, проще всего вот так:
Code: Select all
var hInstanceDLL = AkelPad.GetInstanceDll();
var windowClass = "AkelPadScript:" + hInstanceDLL + ":" + WScript.ScriptName;
var hWndDialog = findWindow(windowClass);
if(hWndDialog) {
AkelPad.SendMessage(hWndDialog, 7 /*WM_SETFOCUS*/, 0, 0);
return;
}
Вроде, работает правильно.