Scripts discussion (1)
- Author
- Message
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
-
Offline
- Posts: 1949
- Joined: Sat Mar 06, 2010 7:40 pm
- Location: Poland
In AkelPad is not possible to select multiple noncontiguous ranges.Andrey_A_A wrote:Подскажите как можно выделить определённые строки одновременно. К примеру мне нужно выделить 1, 7, 11, 22... строку с помощью скрипта...
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.
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
getHash.js
Добавлена галочка для перевода в верхний регистр.
Добавлена галочка для перевода в верхний регистр.
-
Offline
- Posts: 1949
- Joined: Sat Mar 06, 2010 7:40 pm
- Location: Poland
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.
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.
-
Offline
- Posts: 670
- Joined: Thu Jun 03, 2010 8:47 am
- Location: Сочи, Хоста
- Contact:
В скриптах используется команда
SendMessage(hHandle, nMessage, wParam, lParam);
Подскажите, где можно на русском языке прочитать подробную информацию о всех возможных сообщениях (командах), которые можно послать окну (nMessage) и их параметрах. Просто не до конца понятны выражения типа:
273 /*WM_COMMAND*/
3087 /*AEM_SETMODIFY*/
0x400, //LOCALE_USER_DEFAULT
...
в справке, в Scripts-Rus.txt я этого не нашёл.
SendMessage(hHandle, nMessage, wParam, lParam);
Подскажите, где можно на русском языке прочитать подробную информацию о всех возможных сообщениях (командах), которые можно послать окну (nMessage) и их параметрах. Просто не до конца понятны выражения типа:
273 /*WM_COMMAND*/
3087 /*AEM_SETMODIFY*/
0x400, //LOCALE_USER_DEFAULT
...
в справке, в Scripts-Rus.txt я этого не нашёл.
-
Offline
- Posts: 2248
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
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 части)
ЗЫ: Не рекомендую искать русскоязычные справки/учебники. Легче Вам от этого не станет. Разве что у Вас над головой будет стаять специалист.
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 части)
ЗЫ: Не рекомендую искать русскоязычные справки/учебники. Легче Вам от этого не станет. Разве что у Вас над головой будет стаять специалист.
-
Offline
- Posts: 670
- Joined: Thu Jun 03, 2010 8:47 am
- Location: Сочи, Хоста
- Contact:
FeyFre большое спасибо за подробную информацию. Я понимаю что сразу всё не освоить. Я самообучаюсь, разбирая различные скрипты. Начал с vbs , и изначально я сделал собственную справку, куда вносил, и вношу новые освоенные функции, даже целые блоки скриптов, для дальнейшего использования, что позволяет быстро писать, беря нужные блоки. За 8 месяцев написано более 100 скриптов в основном для файловой с-мы в тотале... Появилась мысль оптимизировать AkelPad. Пишу, что-то получается что-то нет. Может кто-то из скринописателей для AkelPada тоже ведёт подобную справку, библиотеку функций, различных шаблонов на русском языке. Если поделитесь - это будет очень здорово.
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Updated:Instructor wrote:Added: method ScriptNoMutex - allow other scripts running with this script at the same time.
goToLongestLine.js
AESCrypt.js
converter.js
getHash.js
LinesFilter_mod2.js
Last edited by Infocatcher on Wed Jan 05, 2011 2:51 pm, edited 1 time in total.
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Updated again. 
Now second launch move focus to already opened dialog window, based on SetCoderExt.js code.

Now second launch move focus to already opened dialog window, based on SetCoderExt.js code.
-
Offline
- Posts: 2248
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
Infocatcher
Ооооочень плохая идея. Гляньте опять в мой скрипт. Я первым аргументом передаю главное окно, а у Вас только ноль. Это не правильно. FindWindowEx перебирает детей указанного родителя, и только прямых детей, а не всех потомков. В случае 0 - детей рабочего стола. Диалог же, который Вы пытаетесь найти - не дочерний рабочему столу, а дочерний главному окну акела. И найден не будет.(И даже если я ошибся, то вот второй пункт) Также если запущено два акела, и два таких скрипта с таким окном, то где Вы прочитали что будет найдено именно нужное Вам окно - принадлежащее тому Акелу, из которого его ищут?
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;
}
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
FeyFre
Это понятно, но у меня ничего не вышло:
И в текущем виде работает. Все же это лучше, чем не делать при повторном запуске вообще ничего.
Видимо, что-то не так где-то здесь:, в hWndParent.
Это понятно, но у меня ничего не вышло:
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.
);
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
На первый взгляд, проще всего вот так: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;
}