Scripts collection

Discuss and announce AkelPad plugins
  • Author
  • Message
KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Interface language files for Translator.js.
File name should have such structure: ScriptNameWithoutExtension_LanguageName.lng

Code: Select all

/********************************
Translator.js - ver. 2018-11-06
Interface language
Language:      English
Translated by: KDJ
********************************/
sTxtCaption    = "Translator";
sTxtUse        = "Use";
sTxtFromLang   = "From language";
sTxtToLang     = "To language";
sTxtAutoDetect = "Auto detect language";
sTxtListen     = "Listen";
sTxtTranslate  = "&Translate";
sTxtTranslateP = "Translate+";
sTxtOptions    = "&Options";
sTxtSource     = "Source text";
sTxtTarget     = "Translated text";
sTxtSettings   = "Settings";
sTxtUndo       = "&Undo";
sTxtRedo       = "&Redo";
sTxtCut        = "&Cut";
sTxtCopyCB     = "C&opy to clipboard";
sTxtInsertAP   = "&Insert to AkelPad";
sTxtPasteCB    = "&Paste from clipboard";
sTxtPasteAP    = "Pa&ste from AkelPad";
sTxtDelete     = "&Delete";
sTxtSelectAll  = "Select &all";
sTxtEntireText = "&Entire text";
sTxtInterface  = "Interface language";
sTxtSourceInCB = "Source text from Clipboard";
sTxtSourceWnd  = "Show panel with source text";
sTxtLoadText   = "Load source text to panel at start";
sTxtImmediate  = "Start immediately translate";
sTxtWordWrap   = "Wrap lines";
sTxtFontAP     = "Font from AkelPad";
sTxtFontGUI    = "GUI font";
sTxtSortLang   = "Languages sort";
sTxtSortCode   = "By code";
sTxtSortName   = "By name";
sTxtOwnKey     = "own key";
sTxtRegister   = "Registration:";
sTxtOK         = "OK";
sTxtCancel     = "Cancel";
sTxtError      = "Error";
sTxtNoText     = "There is no text to translate.";
sTxtNoSupport  = "Your system does not support XMLHttpRequest.";
sTxtNoInternet = "There was a problem with internet connection.";
sTxtWait       = "Wait...";
sTxtUndefined  = "Undefined";
sTxtChooseLang = "You need to choose the language.";
sTxtNoSpeech   = "No support for speech in this language.";
sTxtRegScripts = "You must register library: Scripts.dll";
sTxtNoLibrary  = "Can not load library: ";

aLangs[ 0][1] = "Afrikaans";
aLangs[ 1][1] = "Arabic";
aLangs[ 2][1] = "Azerbaijani";
aLangs[ 3][1] = "Belarusian";
aLangs[ 4][1] = "Bulgarian";
aLangs[ 5][1] = "Bosnian";
aLangs[ 6][1] = "Catalan";
aLangs[ 7][1] = "Czech";
aLangs[ 8][1] = "Welsh";
aLangs[ 9][1] = "Danish";
aLangs[10][1] = "German";
aLangs[11][1] = "Greek";
aLangs[12][1] = "English";
aLangs[13][1] = "Esperanto";
aLangs[14][1] = "Spanish";
aLangs[15][1] = "Estonian";
aLangs[16][1] = "Persian";
aLangs[17][1] = "Finnish";
aLangs[18][1] = "French";
aLangs[19][1] = "Irish";
aLangs[20][1] = "Galician";
aLangs[21][1] = "Hebrew";
aLangs[22][1] = "Hindi";
aLangs[23][1] = "Croatian";
aLangs[24][1] = "Haitian Creole";
aLangs[25][1] = "Hungarian";
aLangs[26][1] = "Armenian";
aLangs[27][1] = "Indonesian";
aLangs[28][1] = "Icelandic";
aLangs[29][1] = "Italian";
aLangs[30][1] = "Hebrew";
aLangs[31][1] = "Japanese";
aLangs[32][1] = "Georgian";
aLangs[33][1] = "Korean";
aLangs[34][1] = "Latin";
aLangs[35][1] = "Lithuanian";
aLangs[36][1] = "Latvian";
aLangs[37][1] = "Macedonian";
aLangs[38][1] = "Malay";
aLangs[39][1] = "Maltese";
aLangs[40][1] = "Dutch";
aLangs[41][1] = "Norwegian";
aLangs[42][1] = "Punjabi";
aLangs[43][1] = "Polish";
aLangs[44][1] = "Portuguese";
aLangs[45][1] = "Romanian";
aLangs[46][1] = "Russian";
aLangs[47][1] = "Slovak";
aLangs[48][1] = "Slovenian";
aLangs[49][1] = "Albanian";
aLangs[50][1] = "Serbian";
aLangs[51][1] = "Swedish";
aLangs[52][1] = "Swahili";
aLangs[53][1] = "Tamil";
aLangs[54][1] = "Thai";
aLangs[55][1] = "Filipino";
aLangs[56][1] = "Turkish";
aLangs[57][1] = "Ukrainian";
aLangs[58][1] = "Urdu";
aLangs[59][1] = "Vietnamese";
aLangs[60][1] = "Yiddish";
aLangs[61][1] = "Chinese";
aLangs[62][1] = "Chinese Simplified";
aLangs[63][1] = "Chinese Traditional";
aLangs[64][1] = "Chinese Simplified";
aLangs[65][1] = "Chinese Traditional";
- template for translation

Code: Select all

/********************************
Translator.js - ver. 2018-11-06
Interface language
Language:      Chinese-Simplified
Translated by: cnnnc
********************************/
sTxtCaption    = "翻译器";
sTxtUse        = "使用";
sTxtFromLang   = "源语言";
sTxtToLang     = "目标语言";
sTxtAutoDetect = "自动检测语言";
sTxtListen     = "朗读";
sTxtTranslate  = "翻译(&T)";
sTxtTranslateP = "翻译+";
sTxtOptions    = "选项(&O)";
sTxtSource     = "来源文本";
sTxtTarget     = "已译文本";
sTxtSettings   = "设置";
sTxtUndo       = "撤消(&U)";
sTxtRedo       = "恢复(&R)";
sTxtCut        = "剪切(&C)";
sTxtCopyCB     = "复制到剪贴板(&O)";
sTxtInsertAP   = "插入到 AkelPad(&I)";
sTxtPasteCB    = "粘贴自剪贴板(&P)";
sTxtPasteAP    = "粘贴自 AkelPad(&S)";
sTxtDelete     = "删除(&D)";
sTxtSelectAll  = "全选(&A)";
sTxtEntireText = "整个文本(&E)";
sTxtInterface  = "界面语言";
sTxtSourceInCB = "源文本来自剪贴板";
sTxtSourceWnd  = "显示源文本的面板";
sTxtLoadText   = "启动时加载源文本到面板";
sTxtImmediate  = "启动时立即翻译";
sTxtWordWrap   = "自动换行";
sTxtFontAP     = "来自 AkelPad 的字体";
sTxtFontGUI    = "GUI 字体";
sTxtSortLang   = "语言排序";
sTxtSortCode   = "按代码";
sTxtSortName   = "按名称";
sTxtOwnKey     = "自定义键";
sTxtRegister   = "登记:";
sTxtOK         = "确定";
sTxtCancel     = "取消";
sTxtError      = "错误";
sTxtNoText     = "无文本可译。";
sTxtNoSupport  = "您的系统不支持 XMLHttpRequest。";
sTxtNoInternet = "因特网连接有问题。";
sTxtWait       = "请稍候...";
sTxtUndefined  = "未定义";
sTxtChooseLang = "您需要选择语言。";
sTxtNoSpeech   = "不支持这种语言的朗读。";
sTxtRegScripts = "必须注册库: Scripts.dll";
sTxtNoLibrary  = "无法加载库: ";

aLangs[ 0][1] = "布尔文(南非荷兰语)";
aLangs[ 1][1] = "阿拉伯语";
aLangs[ 2][1] = "阿塞拜疆语";
aLangs[ 3][1] = "白俄罗斯语";
aLangs[ 4][1] = "保加利亚语";
aLangs[ 5][1] = "波斯尼亚语";
aLangs[ 6][1] = "加泰罗尼亚语";
aLangs[ 7][1] = "捷克语";
aLangs[ 8][1] = "威尔士语";
aLangs[ 9][1] = "丹麦语";
aLangs[10][1] = "德语";
aLangs[11][1] = "希腊语";
aLangs[12][1] = "英语";
aLangs[13][1] = "世界语";
aLangs[14][1] = "西班牙语";
aLangs[15][1] = "爱沙尼亚语";
aLangs[16][1] = "波斯语";
aLangs[17][1] = "芬兰语";
aLangs[18][1] = "法语";
aLangs[19][1] = "爱尔兰语";
aLangs[20][1] = "加利西亚语";
aLangs[21][1] = "希伯来语";
aLangs[22][1] = "印地语";
aLangs[23][1] = "克罗地亚语";
aLangs[24][1] = "海地克里奥尔语";
aLangs[25][1] = "匈牙利语";
aLangs[26][1] = "亚美尼亚语";
aLangs[27][1] = "印尼语";
aLangs[28][1] = "冰岛语";
aLangs[29][1] = "意大利语";
aLangs[30][1] = "希伯来语";
aLangs[31][1] = "日语";
aLangs[32][1] = "格鲁吉亚语";
aLangs[33][1] = "韩语";
aLangs[34][1] = "拉丁语";
aLangs[35][1] = "立陶宛语";
aLangs[36][1] = "拉脱维亚语";
aLangs[37][1] = "马其顿语";
aLangs[38][1] = "马来语";
aLangs[39][1] = "马耳他语";
aLangs[40][1] = "荷兰语";
aLangs[41][1] = "挪威语";
aLangs[42][1] = "旁遮普语";
aLangs[43][1] = "波兰语";
aLangs[44][1] = "葡萄牙语";
aLangs[45][1] = "罗马尼亚语";
aLangs[46][1] = "俄语";
aLangs[47][1] = "斯洛伐克语";
aLangs[48][1] = "斯洛文尼亚语";
aLangs[49][1] = "阿尔巴尼亚语";
aLangs[50][1] = "塞尔维亚语";
aLangs[51][1] = "瑞典语";
aLangs[52][1] = "斯瓦希里语";
aLangs[53][1] = "泰米尔语";
aLangs[54][1] = "泰语";
aLangs[55][1] = "菲律宾语";
aLangs[56][1] = "土耳其语";
aLangs[57][1] = "乌克兰语";
aLangs[58][1] = "乌尔都语";
aLangs[59][1] = "越南语";
aLangs[60][1] = "意第绪语";
aLangs[61][1] = "中文";
aLangs[62][1] = "中文(简体)";
aLangs[63][1] = "中文(繁体)";
aLangs[64][1] = "中文(简体)";
aLangs[65][1] = "中文(繁体)";
- by cnnnc

Code: Select all

/********************************
Translator.js - ver. 2018-11-06
Interface language
Language:      Polish
Translated by: KDJ
********************************/
sTxtCaption    = "Tłumacz";
sTxtUse        = "Używaj";
sTxtFromLang   = "Z języka";
sTxtToLang     = "Na język";
sTxtAutoDetect = "Auto detekcja języka";
sTxtListen     = "Słuchaj";
sTxtTranslate  = "Przetłumac&z";
sTxtTranslateP = "Przetłumacz+";
sTxtOptions    = "&Opcje";
sTxtSource     = "Tekst źródłowy";
sTxtTarget     = "Tłumaczenie";
sTxtSettings   = "Ustawienia";
sTxtUndo       = "&Cofnij";
sTxtRedo       = "&Powtórz";
sTxtCut        = "&Wytnij";
sTxtCopyCB     = "&Kopiuj do schowka";
sTxtInsertAP   = "Ws&taw do AkelPad'a";
sTxtPasteCB    = "Wkl&ej ze schowka";
sTxtPasteAP    = "Wkle&j z AkelPad'a";
sTxtDelete     = "&Usuń";
sTxtSelectAll  = "Zaznacz w&szystko";
sTxtEntireText = "C&ały tekst";
sTxtInterface  = "Język interfejsu";
sTxtSourceInCB = "Tekst źródłowy ze schowka";
sTxtSourceWnd  = "Pokaż panel z tekstem źródłowym";
sTxtLoadText   = "Wczytaj tekst źródłowy do panela przy starcie";
sTxtImmediate  = "Zacznij od razu tłumaczyć";
sTxtWordWrap   = "Zawijaj wiersze";
sTxtFontAP     = "Czcionka z AkelPad'a";
sTxtFontGUI    = "Czcionka interfejsu GUI";
sTxtSortLang   = "Sortowanie języków";
sTxtSortCode   = "Wg kodu";
sTxtSortName   = "Wg nazwy";
sTxtOwnKey     = "własny klucz";
sTxtRegister   = "Rejestracja:";
sTxtOK         = "OK";
sTxtCancel     = "Anuluj";
sTxtError      = "Błąd";
sTxtNoText     = "Brak tekstu do tłumaczenia.";
sTxtNoSupport  = "Twój system nie obsługuje XMLHttpRequest.";
sTxtNoInternet = "Wystąpił problem z połączeniem internetowym.";
sTxtWait       = "Czekaj...";
sTxtUndefined  = "Niezdefiniowany";
sTxtChooseLang = "Musisz wybrać język.";
sTxtNoSpeech   = "Brak obsługi wymowy dla tego języka.";
sTxtRegScripts = "Musisz zarejestrować bibliotekę: Scripts.dll";
sTxtNoLibrary  = "Nie można załadować biblioteki: ";

aLangs[ 0][1] = "Afrykanerski";
aLangs[ 1][1] = "Arabski";
aLangs[ 2][1] = "Azerski";
aLangs[ 3][1] = "Białoruski";
aLangs[ 4][1] = "Bułgarski";
aLangs[ 5][1] = "Bośniacki";
aLangs[ 6][1] = "Kataloński";
aLangs[ 7][1] = "Czeski";
aLangs[ 8][1] = "Walijski";
aLangs[ 9][1] = "Duński";
aLangs[10][1] = "Niemiecki";
aLangs[11][1] = "Grecki";
aLangs[12][1] = "Angielski";
aLangs[13][1] = "Esperanto";
aLangs[14][1] = "Hiszpański";
aLangs[15][1] = "Estoński";
aLangs[16][1] = "Perski";
aLangs[17][1] = "Fiński";
aLangs[18][1] = "Francuski";
aLangs[19][1] = "Irlandzki";
aLangs[20][1] = "Galicyjski";
aLangs[21][1] = "Hebrajski";
aLangs[22][1] = "Hindi";
aLangs[23][1] = "Chorwacki";
aLangs[24][1] = "Haitański Kreolski";
aLangs[25][1] = "Węgierski";
aLangs[26][1] = "Armeński";
aLangs[27][1] = "Indonezyjski";
aLangs[28][1] = "Islandzki";
aLangs[29][1] = "Włoski";
aLangs[30][1] = "Hebrajski";
aLangs[31][1] = "Japoński";
aLangs[32][1] = "Gruziński";
aLangs[33][1] = "Koreański";
aLangs[34][1] = "Łacina";
aLangs[35][1] = "Litewski";
aLangs[36][1] = "Łotewski";
aLangs[37][1] = "Macedoński";
aLangs[38][1] = "Malajski";
aLangs[39][1] = "Maltański";
aLangs[40][1] = "Holenderski";
aLangs[41][1] = "Norweski";
aLangs[42][1] = "Pendżabski";
aLangs[43][1] = "Polski";
aLangs[44][1] = "Portugalski";
aLangs[45][1] = "Rumuński";
aLangs[46][1] = "Rosyjski";
aLangs[47][1] = "Słowacki";
aLangs[48][1] = "Słoweński";
aLangs[49][1] = "Albański";
aLangs[50][1] = "Serbski";
aLangs[51][1] = "Szwedzki";
aLangs[52][1] = "Suahili";
aLangs[53][1] = "Tamilski";
aLangs[54][1] = "Tajski";
aLangs[55][1] = "Filipiński";
aLangs[56][1] = "Turecki";
aLangs[57][1] = "Ukraiński";
aLangs[58][1] = "Urdu";
aLangs[59][1] = "Wietnamski";
aLangs[60][1] = "Jidysz";
aLangs[61][1] = "Chiński";
aLangs[62][1] = "Chiński Uproszczony";
aLangs[63][1] = "Chiński Tradycyjny";
aLangs[64][1] = "Chiński Uproszczony";
aLangs[65][1] = "Chiński Tradycyjny";


Code: Select all

/********************************
Translator.js - ver. 2018-11-06
Interface language
Language:      Russian
Translated by: Infocatcher
********************************/
sTxtCaption    = "Переводчик";
sTxtUse        = "Использовать";
sTxtFromLang   = "С языка";
sTxtToLang     = "На язык";
sTxtAutoDetect = "Автоопределение языка";
sTxtListen     = "Прослушать";
sTxtTranslate  = "&Перевести";
sTxtTranslateP = "Перевести+";
sTxtOptions    = "Па&раметры";
sTxtSource     = "&Исходный текст";
sTxtTarget     = "&Переведенный текст";
sTxtSettings   = "Настройки";
sTxtUndo       = "&Отменить";
sTxtRedo       = "Пов&торить";
sTxtCut        = "&Вырезать";
sTxtCopyCB     = "&Копировать в буфер обмена";
sTxtInsertAP   = "В&ставить в AkelPad";
sTxtPasteCB    = "Вст&авить из буфера обмена";
sTxtPasteAP    = "Вставить &из AkelPad'а";
sTxtDelete     = "&Удалить";
sTxtSelectAll  = "В&ыделить все";
sTxtEntireText = "В&есь текст";
sTxtInterface  = "Язык интерфейса";
sTxtSourceInCB = "Исходный текст из буфера обмена";
sTxtSourceWnd  = "Показывать панель с исходным текстом";
sTxtLoadText   = "Загружать исходный текст при запуске";
sTxtImmediate  = "Переводить при запуске";
sTxtWordWrap   = "Перенос строк";
sTxtFontAP     = "Шрифт из AkelPad'а";
sTxtFontGUI    = "Шрифт интерфейса";
sTxtSortLang   = "Сортировка языков";
sTxtSortCode   = "По коду";
sTxtSortName   = "По названию";
sTxtOwnKey     = "свой ключ";
sTxtRegister   = "Регистрация:";
sTxtOK         = "ОК";
sTxtCancel     = "Отмена";
sTxtError      = "Ошибка";
sTxtNoText     = "Нет текста для перевода.";
sTxtNoSupport  = "Ваша система не поддерживает XMLHttpRequest.";
sTxtNoInternet = "Проблема с подключением к Интернету.";
sTxtWait       = "Подождите...";
sTxtUndefined  = "Неизвестный";
sTxtChooseLang = "Вы должны выбрать язык.";
sTxtNoSpeech   = "Прослушивание для данного языка не поддерживается.";
sTxtRegScripts = "Вы должны зарегистрировать библиотеку: Scripts.dll";
sTxtNoLibrary  = "Не удалось загрузить библиотеку: ";

aLangs[ 0][1] = "Африкаанс";
aLangs[ 1][1] = "Арабский";
aLangs[ 2][1] = "Азербайджанский";
aLangs[ 3][1] = "Белорусский";
aLangs[ 4][1] = "Болгарский";
aLangs[ 5][1] = "Боснийский";
aLangs[ 6][1] = "Каталонский";
aLangs[ 7][1] = "Чешский";
aLangs[ 8][1] = "Валлийский";
aLangs[ 9][1] = "Датский";
aLangs[10][1] = "Немецкий";
aLangs[11][1] = "Греческий";
aLangs[12][1] = "Английский";
aLangs[13][1] = "Эсперанто";
aLangs[14][1] = "Испанский";
aLangs[15][1] = "Эстонский";
aLangs[16][1] = "Персидский";
aLangs[17][1] = "Финский";
aLangs[18][1] = "Французский";
aLangs[19][1] = "Ирландский";
aLangs[20][1] = "Галисийский";
aLangs[21][1] = "Еврейский";
aLangs[22][1] = "Хинди";
aLangs[23][1] = "Хорватский";
aLangs[24][1] = "Гаитянский креольский";
aLangs[25][1] = "Венгерский";
aLangs[26][1] = "Армянский";
aLangs[27][1] = "Индонезийский";
aLangs[28][1] = "Исландский";
aLangs[29][1] = "Итальянский";
aLangs[30][1] = "Еврейский";
aLangs[31][1] = "Японский";
aLangs[32][1] = "Грузинский";
aLangs[33][1] = "Корейский";
aLangs[34][1] = "Латынь";
aLangs[35][1] = "Литовский";
aLangs[36][1] = "Латышский";
aLangs[37][1] = "Македонский";
aLangs[38][1] = "Малайский";
aLangs[39][1] = "Мальтийский";
aLangs[40][1] = "Голландский";
aLangs[41][1] = "Норвежский";
aLangs[42][1] = "Панджаби";
aLangs[43][1] = "Польский";
aLangs[44][1] = "Португальский";
aLangs[45][1] = "Румынский";
aLangs[46][1] = "Русский";
aLangs[47][1] = "Словацкий";
aLangs[48][1] = "Словенский";
aLangs[49][1] = "Албанский";
aLangs[50][1] = "Сербский";
aLangs[51][1] = "Шведский";
aLangs[52][1] = "Суахили";
aLangs[53][1] = "Тамильский";
aLangs[54][1] = "Тайский";
aLangs[55][1] = "Филиппинский";
aLangs[56][1] = "Турецкий";
aLangs[57][1] = "Украинский";
aLangs[58][1] = "Урду";
aLangs[59][1] = "Вьетнамский";
aLangs[60][1] = "Идиш";
aLangs[61][1] = "Китайский";
aLangs[62][1] = "Китайский Упрощенный";
aLangs[63][1] = "Китайский Традиционный";
aLangs[64][1] = "Китайский Упрощенный";
aLangs[65][1] = "Китайский Традиционный";
- by Infocatcher

Code: Select all

/********************************
Translator.js - ver. 2018-11-06
Interface language
Language:      Ukrainian
Translated by: FeyFre
********************************/
sTxtCaption    = "Перекладач";
sTxtUse        = "Використати";
sTxtFromLang   = "Із мови";
sTxtToLang     = "Мовою";
sTxtAutoDetect = "Автовизначення мови";
sTxtListen     = "Прослухати";
sTxtTranslate  = "&Перекласти";
sTxtTranslateP = "Перекласти+";
sTxtOptions    = "&Опції";
sTxtSource     = "Вхідний текст";
sTxtTarget     = "Переклад";
sTxtSettings   = "Налаштовування";
sTxtUndo       = "&Повернути";
sTxtRedo       = "&Повторити";
sTxtCut        = "&Вирізати";
sTxtCopyCB     = "&Копіювати до кишені";
sTxtInsertAP   = "&Вставити у AkelPad";
sTxtPasteCB    = "В&ставити із кишені";
sTxtPasteAP    = "Вс&тавити із AkelPad";
sTxtDelete     = "В&идалити";
sTxtSelectAll  = "Ви&ділити все";
sTxtEntireText = "&Увесь текст";
sTxtInterface  = "Мова інтерфейсу";
sTxtSourceInCB = "Вихідний текст із Кишені";
sTxtSourceWnd  = "Показати вікно з джерелом";
sTxtLoadText   = "Завантажити виділений текст при запуску";
sTxtImmediate  = "Одразу розпочати переклад";
sTxtWordWrap   = "Переносити стрічки";
sTxtFontAP     = "Шрифт із AkelPad";
sTxtFontGUI    = "Інтерфейсний шрифт";
sTxtSortLang   = "Упорядкування мов";
sTxtSortCode   = "За кодом";
sTxtSortName   = "За іменем";
sTxtOwnKey     = "власний ключ";
sTxtRegister   = "Реєстрація:";
sTxtOK         = "Добре";
sTxtCancel     = "Скасувати";
sTxtError      = "Помилка";
sTxtNoText     = "Нічого перекладати.";
sTxtNoSupport  = "Ваша система не підтримує XMLHttpRequest.";
sTxtNoInternet = "Виявлено проблему із підключення до Інтернету.";
sTxtWait       = "Зачекайте...";
sTxtUndefined  = "Невизначено";
sTxtChooseLang = "Ви маєте обрати мову.";
sTxtNoSpeech   = "Вимова у цій мові не підтримується.";
sTxtRegScripts = "Ви повинні зареєструвати бібліотеку: Scripts.dll";
sTxtNoLibrary  = "Не можу завантажити бібліотеку: ";

aLangs[ 0][1] = "Африкаанс";
aLangs[ 1][1] = "Арабська";
aLangs[ 2][1] = "Azerbaijani";              //new
aLangs[ 3][1] = "Білоруська";
aLangs[ 4][1] = "Болгарська";
aLangs[ 5][1] = "Bosnian";                  //new
aLangs[ 6][1] = "Каталоньска";
aLangs[ 7][1] = "Чеське";
aLangs[ 8][1] = "Валлійська";
aLangs[ 9][1] = "Датська";
aLangs[10][1] = "Німецька";
aLangs[11][1] = "Грецька";
aLangs[12][1] = "Англійська";
aLangs[13][1] = "Есперанто";
aLangs[14][1] = "Іспанська";
aLangs[15][1] = "Естонська";
aLangs[16][1] = "Перська";
aLangs[17][1] = "Фінська";
aLangs[18][1] = "Французька";
aLangs[19][1] = "Ірландська";
aLangs[20][1] = "Галійська";
aLangs[21][1] = "Іврит";
aLangs[22][1] = "Хінді";
aLangs[23][1] = "Хорватська";
aLangs[24][1] = "Креольска";
aLangs[25][1] = "Угорська";
aLangs[26][1] = "Armenian";                 //new
aLangs[27][1] = "Індонезійська";
aLangs[28][1] = "Ісландська";
aLangs[29][1] = "Італійська";
aLangs[30][1] = "Іврит";
aLangs[31][1] = "Японська";
aLangs[32][1] = "Georgian";                 //new
aLangs[33][1] = "Корейська";
aLangs[34][1] = "Латинь";
aLangs[35][1] = "Литовська";
aLangs[36][1] = "Латвійська";
aLangs[37][1] = "Македонська";
aLangs[38][1] = "Малайська";
aLangs[39][1] = "Мальтійська";
aLangs[40][1] = "Голландська";
aLangs[41][1] = "Норвезька";
aLangs[42][1] = "Punjabi";                  //new
aLangs[43][1] = "Польська";
aLangs[44][1] = "Португальська";
aLangs[45][1] = "Румунська";
aLangs[46][1] = "Російська";
aLangs[47][1] = "Словацька";
aLangs[48][1] = "Словенська";
aLangs[49][1] = "Албанська";
aLangs[50][1] = "Сербська";
aLangs[51][1] = "Шведська";
aLangs[52][1] = "Суахілі";
aLangs[53][1] = "Tamil";                    //new
aLangs[54][1] = "Тайська";
aLangs[55][1] = "Філіппінська";
aLangs[56][1] = "Турецька";
aLangs[57][1] = "Українська";
aLangs[58][1] = "Урду";
aLangs[59][1] = "В'єтнамська";
aLangs[60][1] = "Їдиш";
aLangs[61][1] = "Китайська";
aLangs[62][1] = "Китайська спрощена";
aLangs[63][1] = "Китайська Традиційна";
aLangs[64][1] = "Китайська спрощена";
aLangs[65][1] = "Китайська Традиційна";
- by FeyFre
Last edited by KDJ on Tue Nov 06, 2018 7:38 pm, edited 42 times in total.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13096#p13096
// http://infocatcher.ucoz.net/js/akelpad_scripts/alignWithSpaces.js
// https://github.com/Infocatcher/AkelPad_scripts/blob/master/alignWithSpaces.js

// (c) Infocatcher 2011, 2014
// version 0.2.2.1 - 2014-05-06

//===================
// Align selected code with spaces to user defined string

// Hotkeys:
//   Enter                    - Ok
//   Ctrl+Enter, Shift+Enter  - Align
//   Escape                   - Cancel
//   F1                       - Select next align option
//   F2                       - Select next spaces option
//   Ctrl+Z                   - Undo
//   Ctrl+Shift+Z             - Redo
//   Ctrl+C, Ctrl+Insert      - Copy
//   Ctrl+V, Shift+Insert     - Paste
//   Ctrl+X, Shift+Del        - Cut
//   Delete                   - Delete selection
//   Ctrl+A                   - Select all
//   Ctrl+S                   - Save file

// Argumens:
//   -dialog=true        - show dialog
//   -sepAtStart=false   - -> [separator][text]
//              =true    - [separator] -> [text]
//   -minimize=0         - leave all spaces
//            =1         - leave only one space (if exist)
//            =2         - remove all spaces
//   -sep="="            - don't ask separator
//   -history=10         - set history length
//   -saveOptions=0      - don't store options
//               =1      - (default) save options after them usage
//               =2      - save options on exit
//   -savePosition=true  - allow store last window position

// Usage:
//   Call("Scripts::Main", 1, "alignWithSpaces.js")
//   Call("Scripts::Main", 1, "alignWithSpaces.js", '-dialog=false -sep="=" -sepAtStart=true')
//===================

function _localize(s) {
	var strings = {
		"No text selected!": {
			ru: "Отсутствует выделенный текст!"
		},
		"Only one line selected!": {
			ru: "Выделена только одна строка!"
		},
		"Invalid regular expression!": {
			ru: "Неверное регулярное выражение!"
		},
		"Separator “%S” not found!": {
			ru: "Разделитель «%S» не найден!"
		},
		"Found only one separator “%S”!": {
			ru: "Найден только один разделитель «%S»!"
		},

		"&Separator:": {
			ru: "&Разделитель:"
		},

		"&Alignement": {
			ru: "&Выравнивание"
		},
		"-> [separator][text]": {
			ru: "-> [разделитель][текст]"
		},
		"[separator] -> [text]": {
			ru: "[разделитель] -> [текст]"
		},

		"&Spaces": {
			ru: "&Пробелы"
		},
		"Leave all": {
			ru: "Оставить все"
		},
		"Leave only one": {
			ru: "Оставить только один"
		},
		"Remove all": {
			ru: "Удалить все"
		},

		"OK": {
			ru: "ОК"
		},
		"Align": {
			ru: "Выровнять"
		},
		"Cancel": {
			ru: "Отмена"
		}
	};
	var lng;
	switch(AkelPad.GetLangId(1 /*LANGID_PRIMARY*/)) {
		case 0x19: lng = "ru"; break;
		default:   lng = "en";
	}
	_localize = function(s) {
		return strings[s] && strings[s][lng] || s;
	};
	return _localize(s);
}

// Read arguments:
// getArg(argName, defaultValue)
var dialog        = getArg("dialog", true);
var sepAtStart    = getArg("sepAtStart", false);
var minimize      = getArg("minimize", 0);
var separator     = getArg("sep");
var historyLength = getArg("history", 10);
var saveOptions   = getArg("saveOptions", 1);
var savePosition  = getArg("savePosition", true);

var hMainWnd = AkelPad.GetMainWnd();
var hWndEdit = AkelPad.GetEditWnd();
var oSys = AkelPad.SystemFunction();
var oSet = AkelPad.ScriptSettings();
var dialogTitle = WScript.ScriptName.replace(/^[!-\-_]+/, "");
dialogTitle = dialogTitle.charAt(0).toUpperCase() + dialogTitle.substr(1);

if(hMainWnd) {
	if(dialog || !separator)
		alignWithSpacesDialog();
	else
		alignWithSpaces(separator);
}

function alignWithSpaces(sep, hWnd) {
	if(AkelPad.GetEditReadOnly(hWndEdit))
		return false;
	var sel = AkelPad.GetSelText();
	if(!sel) {
		AkelPad.MessageBox(hWnd || hMainWnd, _localize("No text selected!"), dialogTitle, 48 /*MB_ICONEXCLAMATION*/);
		return false;
	}
	var lines = sel.split("\r");
	var linesCnt = lines.length;
	if(linesCnt == 1) {
		AkelPad.MessageBox(hWnd || hMainWnd, _localize("Only one line selected!"), dialogTitle, 48 /*MB_ICONEXCLAMATION*/);
		return false;
	}
	if(!sep) {
		if(!hWnd)
			alignWithSpacesDialog();
		return false;
	}
	var pattern;
	var isRegExp = false;
	if(/^\/(.+)\/(i?)$/.test(sep)) { // /RegExp/ and /RegExp/i
		try {
			pattern = new RegExp(RegExp.$1, RegExp.$2);
			isRegExp = true;
		}
		catch(e) {
			AkelPad.MessageBox(
				hWnd || hMainWnd,
				_localize("Invalid regular expression!")
					+ "\n" + e.name + "\n" + e.message,
				dialogTitle,
				16 /*MB_ICONERROR*/
			);
			if(!hWnd) {
				separator = sep;
				alignWithSpacesDialog();
			}
			return false;
		}
	}
	//else if(/^("|')(.+)\1$/.test(sep))
	else {
		pattern = new RegExp(escapeRegExp(sep));
	}
	var maxPos = -1;
	var indexes = [];
	var startOffset = 0;
	var found = 0;
	for(var i = 0; i < linesCnt; ++i) {
		var line = lines[i];
		var indx = line.search(pattern);
		indexes[i] = indx;
		if(indx == -1)
			continue;
		++found;
		//~ todo: calculate real tab width
		if(sepAtStart) {
			indx += RegExp.lastMatch.length;
			var lineEnd = line.substr(indx);
			if(minimize) {
				var lineEnd = lineEnd.replace(/^[ \t]+/, minimize == 1 ? " " : "");
				line = lines[i] = line.substr(0, indx) + lineEnd;
			}
			indx += lineEnd.match(/^[ \t]*/)[0].length;
			indexes[i] = indx;
		}
		else if(minimize) {
			var lineStart = line.substr(0, indx);
			var lineEnd = line.substr(indx);
			var lineStartNew = lineStart.replace(/[ \t]+$/, minimize == 1 ? " " : "");
			indx = indexes[i] = lineStartNew.length;
			line = lines[i] = lineStartNew + lineEnd;
		}
		if(i == 0 && !AkelPad.SendMessage(hWndEdit, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0)) {
			var ss = AkelPad.GetSelStart();
			var lineStart = getOffset(hWndEdit, 18 /*AEGI_WRAPLINEBEGIN*/, ss);
			startOffset = ss - lineStart;
			indx += startOffset;
		}
		if(indx > maxPos)
			maxPos = indx;
	}
	if(found <= 1) {
		AkelPad.MessageBox(
			hWnd || hMainWnd,
			_localize(found ? "Found only one separator “%S”!" : "Separator “%S” not found!")
				.replace("%S", isRegExp ? pattern : sep),
			dialogTitle,
			48 /*MB_ICONEXCLAMATION*/
		);
		if(!hWnd) {
			separator = sep;
			alignWithSpacesDialog();
		}
		return false;
	}
	for(var i = 0; i < linesCnt; ++i) {
		var line = lines[i];
		var indx = indexes[i];
		if(indx == -1/* || indx == maxPos*/)
			continue;
		var spaces = new Array(maxPos - indx - (i == 0 ? startOffset : 0) + 1).join(" ");
		var lineStart = line.substr(0, indx);
		lineStart = lineStart.replace(/[\t ]*$/, "") + new Array(RegExp.lastMatch.length + 1).join(" ");
		var lineEnd = line.substr(indx);
		lineEnd = lineEnd.replace(/^[\t ]*/, "") + new Array(RegExp.lastMatch.length + 1).join(" ");
		lines[i] = lineStart + spaces + lineEnd;
	}
	var res = lines.join("\r");
	if(res != sel)
		insertNoScroll(res);
	return true;
}

function alignWithSpacesDialog(modal) {
	var hInstanceDLL = AkelPad.GetInstanceDll();
	var dialogClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + oSys.Call("kernel32::GetCurrentProcessId");

	var hWndDialog = oSys.Call("user32::FindWindowEx" + _TCHAR, 0, 0, dialogClass, 0);
	if(hWndDialog) {
		if(oSys.Call("user32::IsIconic", hWndDialog))
			oSys.Call("user32::ShowWindow", hWndDialog, 9 /*SW_RESTORE*/);
		AkelPad.SendMessage(hWndDialog, 7 /*WM_SETFOCUS*/, 0, 0);
		return;
	}

	if(
		!AkelPad.WindowRegisterClass(dialogClass)
		&& ( // Previous script instance crashed
			!AkelPad.WindowUnregisterClass(dialogClass)
			|| !AkelPad.WindowRegisterClass(dialogClass)
		)
	)
		return;

	var optionsUsed = false;
	var lastSeps = [];
	var savedSepsCount = 0;
	var dlgX, dlgY;
	if((saveOptions || savePosition) && oSet.Begin(WScript.ScriptBaseName, 0x1 /*POB_READ*/)) {
		if(saveOptions) {
			for(var i = 0; ; ++i) {
				var s = oSet.Read("lastSeparator" + i, 3 /*PO_STRING*/, "");
				if(!s)
					break;
				if(i < historyLength)
					lastSeps[lastSeps.length] = s;
			}
			savedSepsCount = i;
			if(getArg("sepAtStart") === undefined)
				sepAtStart = oSet.Read("sepAtStart", 1 /*PO_DWORD*/) || 0;
			if(getArg("minimize") === undefined)
				minimize = oSet.Read("minimize", 1 /*PO_DWORD*/) || 0;
		}
		if(savePosition) {
			dlgX = oSet.Read("windowLeft", 1 /*PO_DWORD*/);
			dlgY = oSet.Read("windowTop",  1 /*PO_DWORD*/);
		}
		oSet.End();
	}
	function saveSettings(rewrite) {
		if(!saveOptions && !savePosition)
			return;
		if(!oSet.Begin(WScript.ScriptBaseName, 0x2 /*POB_SAVE*/))
			return;
		if(saveOptions && (saveOptions == 2 || optionsUsed)) {
			if(readControlsState()) {
				oSet.Write("sepAtStart", 1 /*PO_DWORD*/, sepAtStart);
				oSet.Write("minimize",   1 /*PO_DWORD*/, minimize);
			}
			var histLen = Math.min(historyLength, lastSeps.length);
			for(var i = 0, l = Math.max(historyLength, savedSepsCount); i < l; ++i) {
				if(i < histLen)
					oSet.Write("lastSeparator" + i, 3 /*PO_STRING*/, lastSeps[i]);
				else
					oSet.Delete("lastSeparator" + i);
			}
		}
		if(savePosition && !oSys.Call("user32::IsIconic", hWndDialog)) {
			var rcWnd = getWindowRect(hWndDialog);
			if(rcWnd) {
				oSet.Write("windowLeft", 1 /*PO_DWORD*/, rcWnd.left);
				oSet.Write("windowTop",  1 /*PO_DWORD*/, rcWnd.top);
			}
		}
		oSet.End();
	}

	var IDC_STATIC         = -1;
	var IDC_COMBOBOX_LABEL = 1000;
	var IDC_COMBOBOX       = 1001;
	var IDC_SEP_AT_END     = 1002;
	var IDC_SEP_AT_START   = 1003;
	var IDC_SP_LEAVE       = 1004;
	var IDC_SP_LEAVE_ONE   = 1005;
	var IDC_SP_REMOVE      = 1006;
	var IDC_OK             = 1007;
	var IDC_ALIGN          = 1008;
	var IDC_CANCEL         = 1009;

	var hWndStatic;
	var hWndComboboxLabel, hWndCombobox;
	var hWndSepAtEnd, hWndSepAtStart;
	var hWndSpLeave, hWndSpLeaveOne, hWndSpRemove;
	var hWndOK, hWndAlign, hWndCancel;

	var scale = new Scale(0, hMainWnd);
	var sizeNonClientX = oSys.Call("user32::GetSystemMetrics", 7 /*SM_CXFIXEDFRAME*/)*2;
	var sizeNonClientY = oSys.Call("user32::GetSystemMetrics", 8 /*SM_CYFIXEDFRAME*/)*2
		+ oSys.Call("user32::GetSystemMetrics", 4 /*SM_CYCAPTION*/);

	// Create dialog
	hWndDialog = oSys.Call(
		"user32::CreateWindowEx" + _TCHAR,
		0,                             //dwExStyle
		dialogClass,                   //lpClassName
		0,                             //lpWindowName
		0x90CA0000,                    //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
		scale.x(0),                    //x
		scale.y(0),                    //y
		scale.x(446) + sizeNonClientX, //nWidth
		scale.y(122) + sizeNonClientY, //nHeight
		hMainWnd,                      //hWndParent
		0,                             //ID
		hInstanceDLL,                  //hInstance
		dialogCallback                 //Script function callback. To use it class must be registered by WindowRegisterClass.
	);
	if(!hWndDialog)
		return;

	function dialogCallback(hWnd, uMsg, wParam, lParam) {
		switch(uMsg) {
			case 1: //WM_CREATE
				var hGuiFont = oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
				function setWindowFontAndText(hWnd, hFont, pText) {
					AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);
					windowText(hWnd, pText);
				}

				// Dialog caption
				oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, dialogTitle);

				// Static window: combobox label
				hWndComboboxLabel = createWindowEx(
					0,                  //dwExStyle
					"STATIC",           //lpClassName
					0,                  //lpWindowName
					0x50000100,         //WS_VISIBLE|WS_CHILD|SS_NOTIFY
					12,                 //x
					15,                 //y
					78,                 //nWidth
					13,                 //nHeight
					hWnd,               //hWndParent
					IDC_COMBOBOX_LABEL, //ID
					hInstanceDLL,       //hInstance
					0                   //lpParam
				);
				setWindowFontAndText(hWndComboboxLabel, hGuiFont, _localize("&Separator:"));

				hWndCombobox = createWindowEx(
					0,            //dwExStyle
					"COMBOBOX",   //lpClassName
					0,            //lpWindowName
					0x50210042,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_DROPDOWN|CBS_AUTOHSCROLL
					90,           //x
					12,           //y
					254,          //nWidth
					160,          //nHeight
					hWnd,         //hWndParent
					IDC_COMBOBOX, //ID
					hInstanceDLL, //hInstance
					0             //lpParam
				);
				for(var i = 0, l = lastSeps.length; i < l; ++i) {
					//AkelPad.MemCopy(lpBuffer, lastSeps[i], _TSTR);
					//AkelPad.SendMessage(hWndCombobox, 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
					oSys.Call("user32::SendMessage" + _TCHAR, hWndCombobox, 0x143 /*CB_ADDSTRING*/, 0, lastSeps[i]);
				}
				setWindowFontAndText(hWndCombobox, hGuiFont, separator || "");
				!separator && AkelPad.SendMessage(hWndCombobox, 0x14E /*CB_SETCURSEL*/, 0, 0);

				// GroupBox alignement
				hWndStatic = createWindowEx(
					0,            //dwExStyle
					"BUTTON",     //lpClassName
					0,            //lpWindowName
					0x50000007,   //WS_VISIBLE|WS_CHILD|BS_GROUPBOX
					12,           //x
					38,           //y
					160,          //nWidth
					56,           //nHeight
					hWnd,         //hWndParent
					IDC_STATIC,   //ID
					hInstanceDLL, //hInstance
					0             //lpParam
				);
				setWindowFontAndText(hWndStatic, hGuiFont, _localize("&Alignement"));

				// Radiobutton separator at end
				hWndSepAtEnd = createWindowEx(
					0,              //dwExStyle
					"BUTTON",       //lpClassName
					0,              //lpWindowName
					0x50000004,     //WS_VISIBLE|WS_CHILD|BS_RADIOBUTTON
					20,             //x
					54,             //y
					144,            //nWidth
					16,             //nHeight
					hWnd,           //hWndParent
					IDC_SEP_AT_END, //ID
					hInstanceDLL,   //hInstance
					0               //lpParam
				);
				setWindowFontAndText(hWndSepAtEnd, hGuiFont, _localize("-> [separator][text]"));
				checked(hWndSepAtEnd, !sepAtStart);

				// Radiobutton separator at start
				hWndSepAtStart = createWindowEx(
					0,                //dwExStyle
					"BUTTON",         //lpClassName
					0,                //lpWindowName
					0x50000004,       //WS_VISIBLE|WS_CHILD|BS_RADIOBUTTON
					20,               //x
					72,               //y
					144,              //nWidth
					16,               //nHeight
					hWnd,             //hWndParent
					IDC_SEP_AT_START, //ID
					hInstanceDLL,     //hInstance
					0                 //lpParam
				);
				setWindowFontAndText(hWndSepAtStart, hGuiFont, _localize("[separator] -> [text]"));
				checked(hWndSepAtStart, sepAtStart);


				// GroupBox spaces
				hWndStatic = createWindowEx(
					0,            //dwExStyle
					"BUTTON",     //lpClassName
					0,            //lpWindowName
					0x50000007,   //WS_VISIBLE|WS_CHILD|BS_GROUPBOX
					184,          //x
					38,           //y
					160,          //nWidth
					72,           //nHeight
					hWnd,         //hWndParent
					IDC_STATIC,   //ID
					hInstanceDLL, //hInstance
					0             //lpParam
				);
				setWindowFontAndText(hWndStatic, hGuiFont, _localize("&Spaces"));

				// Radiobutton leave all spaces
				hWndSpLeave = createWindowEx(
					0,            //dwExStyle
					"BUTTON",     //lpClassName
					0,            //lpWindowName
					0x50000004,   //WS_VISIBLE|WS_CHILD|BS_RADIOBUTTON
					192,          //x
					54,           //y
					144,          //nWidth
					16,           //nHeight
					hWnd,         //hWndParent
					IDC_SP_LEAVE, //ID
					hInstanceDLL, //hInstance
					0             //lpParam
				);
				setWindowFontAndText(hWndSpLeave, hGuiFont, _localize("Leave all"));
				checked(hWndSpLeave, minimize == 0);

				// Radiobutton leave only one space
				hWndSpLeaveOne = createWindowEx(
					0,                //dwExStyle
					"BUTTON",         //lpClassName
					0,                //lpWindowName
					0x50000004,       //WS_VISIBLE|WS_CHILD|BS_RADIOBUTTON
					192,              //x
					71,               //y
					144,              //nWidth
					16,               //nHeight
					hWnd,             //hWndParent
					IDC_SP_LEAVE_ONE, //ID
					hInstanceDLL,     //hInstance
					0                 //lpParam
				);
				setWindowFontAndText(hWndSpLeaveOne, hGuiFont, _localize("Leave only one"));
				checked(hWndSpLeaveOne, minimize == 1);

				// Radiobutton remove all spaces
				hWndSpRemove = createWindowEx(
					0,             //dwExStyle
					"BUTTON",      //lpClassName
					0,             //lpWindowName
					0x50000004,    //WS_VISIBLE|WS_CHILD|BS_RADIOBUTTON
					192,           //x
					88,            //y
					144,           //nWidth
					16,            //nHeight
					hWnd,          //hWndParent
					IDC_SP_REMOVE, //ID
					hInstanceDLL,  //hInstance
					0              //lpParam
				);
				setWindowFontAndText(hWndSpRemove, hGuiFont, _localize("Remove all"));
				checked(hWndSpRemove, minimize == 2);


				// OK button window
				hWndOK = createWindowEx(
					0,            //dwExStyle
					"BUTTON",     //lpClassName
					0,            //lpWindowName
					0x50010001,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON
					355,          //x
					11,           //y
					80,           //nWidth
					23,           //nHeight
					hWnd,         //hWndParent
					IDC_OK,       //ID
					hInstanceDLL, //hInstance
					0             //lpParam
				);
				setWindowFontAndText(hWndOK, hGuiFont, _localize("OK"));

				// Apply button window
				hWndAlign = createWindowEx(
					0,            //dwExStyle
					"BUTTON",     //lpClassName
					0,            //lpWindowName
					0x50010000,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP
					355,          //x
					38,           //y
					80,           //nWidth
					23,           //nHeight
					hWnd,         //hWndParent
					IDC_ALIGN,    //ID
					hInstanceDLL, //hInstance
					0             //lpParam
				);
				setWindowFontAndText(hWndAlign, hGuiFont, _localize("Align"));

				// Cancel button window
				hWndCancel = createWindowEx(
					0,            //dwExStyle
					"BUTTON",     //lpClassName
					0,            //lpWindowName
					0x50010000,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP
					355,          //x
					65,           //y
					80,           //nWidth
					23,           //nHeight
					hWnd,         //hWndParent
					IDC_CANCEL,   //ID
					hInstanceDLL, //hInstance
					0             //lpParam
				);
				setWindowFontAndText(hWndCancel, hGuiFont, _localize("Cancel"));

				//centerWindow(hWnd, hMainWnd);
				restoreWindowPosition(hWnd, hMainWnd);
			break;
			case 7: //WM_SETFOCUS
				oSys.Call("user32::SetFocus", hWndCombobox);
			break;
			case 256: //WM_KEYDOWN
				var ctrl = oSys.Call("user32::GetAsyncKeyState", 162 /*VK_LCONTROL*/)
					|| oSys.Call("user32::GetAsyncKeyState", 163 /*VK_RCONTROL*/);
				var shift = oSys.Call("user32::GetAsyncKeyState", 160 /*VK_LSHIFT*/)
					|| oSys.Call("user32::GetAsyncKeyState", 161 /*VK_RSHIFT*/);
				if(wParam == 27 /*VK_ESCAPE*/)
					oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_CANCEL, 0);
				else if(wParam == 13 /*VK_RETURN*/) {
					if(ctrl || shift) // Ctrl+Enter, Shift+Enter
						oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_ALIGN, 0);
					else // Enter
						oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_OK, 0);
				}
				else if(wParam == 112 /*VK_F1*/) // F1
					navigate(hWndSepAtEnd, hWndSepAtStart);
				else if(wParam == 113 /*VK_F2*/) // F2
					navigate(hWndSpLeave, hWndSpLeaveOne, hWndSpRemove);
				else if(wParam == 90 /*Z*/) {
					if(ctrl && shift) // Ctrl+Shift+Z
						!comboboxFocused() && AkelPad.Command(4152); //IDM_EDIT_REDO
					else if(ctrl) // Ctrl+Z
						!comboboxFocused() && AkelPad.Command(4151); //IDM_EDIT_UNDO
				}
				else if(ctrl && wParam == 67 /*C*/ || ctrl && wParam == 45 /*VK_INSERT*/) // Ctrl+C, Ctrl+Insert
					!comboboxFocused() && AkelPad.Command(4154); //IDM_EDIT_COPY
				else if(ctrl && wParam == 86 /*V*/ || shift && wParam == 45 /*VK_INSERT*/) // Ctrl+V, Shift+Insert
					!comboboxFocused() && noScroll(function() {
						AkelPad.Command(4155); //IDM_EDIT_PASTE
					});
				else if(ctrl && wParam == 88 /*X*/ || shift && wParam == 46 /*VK_DELETE*/) // Ctrl+X, Shift+Del
					!comboboxFocused() && AkelPad.Command(4153); //IDM_EDIT_CUT
				else if(wParam == 46 /*VK_DELETE*/) // Delete
					!comboboxFocused() && AkelPad.Command(4156); //IDM_EDIT_CLEAR
				else if(ctrl && wParam == 65 /*A*/) // Ctrl+A
					!comboboxFocused() && noScroll(function() {
						AkelPad.Command(4157); //IDM_EDIT_SELECTALL
					});
				else if(ctrl && wParam == 83 /*S*/) // Ctrl+S
					AkelPad.Command(4105); // IDM_FILE_SAVE

				//else if(wParam != 16 /*VK_SHIFT*/ && wParam != 17 /*VK_CONTROL*/ && wParam != 18 /*VK_MENU*/)
				//	AkelPad.MessageBox(hWnd, wParam, dialogTitle, 0 /*MB_OK*/);
			break;
			case 273: //WM_COMMAND
				var idc = wParam & 0xffff;
				switch(idc) {
					case IDC_OK:
					case IDC_ALIGN:
						if(!readControlsState())
							break;
						var curSep = windowText(hWndCombobox);
						if(!curSep)
							break;
						hWndEdit = AkelPad.GetEditWnd();
						if(!alignWithSpaces(curSep, hWnd))
							break;
						addToHistory(curSep);
						optionsUsed = true;
						if(idc == IDC_OK)
							closeDialog();
					break;
					case IDC_CANCEL:
						closeDialog();
					break;
					case IDC_COMBOBOX_LABEL:
						oSys.Call("user32::SetFocus", hWndCombobox);
					break;
					case IDC_COMBOBOX:
						var ok = false;
						if(wParam >> 16 == 1 /*CBN_SELCHANGE*/) {
							var i = AkelPad.SendMessage(hWndCombobox, 0x147 /*CB_GETCURSEL*/, 0, 0);
							ok = AkelPad.SendMessage(hWndCombobox, 0x149 /*CB_GETLBTEXTLEN*/, i, 0) > 0;
						}
						else {
							ok = oSys.Call("user32::GetWindowTextLength" + _TCHAR, hWndCombobox) > 0;
						}
						enabled(hWndAlign, ok);
						enabled(hWndOK,    ok);
					break;
					case IDC_SEP_AT_END:
					case IDC_SEP_AT_START:
						checked(hWndSepAtEnd,   idc == IDC_SEP_AT_END);
						checked(hWndSepAtStart, idc == IDC_SEP_AT_START);
						if((wParam >> 16 & 0xFFFF) == 5 /*BN_DOUBLECLICKED*/)
							oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_ALIGN, 0);
					break;
					case IDC_SP_LEAVE:
					case IDC_SP_LEAVE_ONE:
					case IDC_SP_REMOVE:
						checked(hWndSpLeave,    idc == IDC_SP_LEAVE);
						checked(hWndSpLeaveOne, idc == IDC_SP_LEAVE_ONE);
						checked(hWndSpRemove,   idc == IDC_SP_REMOVE);
						if((wParam >> 16 & 0xFFFF) == 5 /*BN_DOUBLECLICKED*/)
							oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_ALIGN, 0);
				}
			break;
			case 16: //WM_CLOSE
				saveSettings();
				modal && enabled(hMainWnd, true); // Enable main window
				oSys.Call("user32::DestroyWindow", hWnd); // Destroy dialog
			break;
			case 2: //WM_DESTROY
				oSys.Call("user32::PostQuitMessage", 0); // Exit message loop
		}
		return 0;
	}

	function comboboxFocused() {
		//typedef struct tagCOMBOBOXINFO {
		//  DWORD cbSize;
		//  RECT  rcItem;
		//  RECT  rcButton;
		//  DWORD stateButton;
		//  HWND  hwndCombo;
		//  HWND  hwndItem;
		//  HWND  hwndList;
		//} COMBOBOXINFO, *PCOMBOBOXINFO, *LPCOMBOBOXINFO;
		var sizeofCBI = 4 + 16*2 + 4*4;
		var pcbi = AkelPad.MemAlloc(sizeofCBI);
		if(!pcbi)
			return false;
		AkelPad.MemCopy(pcbi, sizeofCBI, 3 /*DT_DWORD*/);
		if(!oSys.Call("user32::GetComboBoxInfo", hWndCombobox, pcbi))
			return false;
		var hWndComboboxEdit = AkelPad.MemRead(pcbi + 4 + 16*2 + 4*2, 3 /*DT_DWORD*/);
		comboboxFocused = function() {
			return oSys.Call("user32::GetFocus") == hWndComboboxEdit;
		};
		return comboboxFocused();
	}
	function readControlsState() {
		if(checked(hWndSepAtStart))
			sepAtStart = true;
		else if(checked(hWndSepAtEnd))
			sepAtStart = false;
		else
			return false;

		if(checked(hWndSpLeave))
			minimize = 0;
		else if(checked(hWndSpLeaveOne))
			minimize = 1;
		else if(checked(hWndSpRemove))
			minimize = 2;
		else
			return false;

		return true;
	}
	function navigate() {
		for(var i = 0, len = arguments.length; i < len; ++i) {
			var hWndRadio = arguments[i];
			if(!checked(hWndRadio))
				continue;
			checked(hWndRadio, false);
			checked(arguments[i == len - 1 ? 0 : i + 1], true);
			break;
		}
	}
	function addToHistory(str) {
		var histLen = lastSeps.length;
		for(var i = 0; i < histLen;) {
			if(lastSeps[i] != str) {
				++i;
				continue;
			}
			AkelPad.SendMessage(hWndCombobox, 0x144 /*CB_DELETESTRING*/, i, 0);
			if(lastSeps.splice)
				lastSeps.splice(i, 1);
			else {
				for(var j = i + 1; j < histLen; ++j)
					lastSeps[j - 1] = lastSeps[j];
				lastSeps.length--;
			}
			histLen--;
		}
		//AkelPad.SendMessage(hWndCombobox, 0x14A /*CB_INSERTSTRING*/, 0, lpBuffer);
		oSys.Call("user32::SendMessage" + _TCHAR, hWndCombobox, 0x14A /*CB_INSERTSTRING*/, 0, str);
		AkelPad.SendMessage(hWndCombobox, 0x14E /*CB_SETCURSEL*/, 0, 0);
		if(lastSeps.unshift)
			lastSeps.unshift(str);
		else {
			for(var j = histLen; j > 0; j--)
				lastSeps[j] = lastSeps[j - 1];
			lastSeps[0] = str;
		}
		if(lastSeps.length > historyLength) {
			AkelPad.SendMessage(hWndCombobox, 0x144 /*CB_DELETESTRING*/, histLen - 1, 0);
			lastSeps.length = historyLength;
		}
	}

	function restoreWindowPosition(hWnd, hWndParent) {
		if(dlgX == undefined || dlgY == undefined) {
			centerWindow(hWnd, hWndParent);
			return;
		}

		var rcWnd = getWindowRect(hWnd);
		if(!rcWnd)
			return;

		var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
		if(!lpRect)
			return;
		AkelPad.MemCopy(lpRect,      dlgX,                              3 /*DT_DWORD*/);
		AkelPad.MemCopy(lpRect + 4,  dlgY,                              3 /*DT_DWORD*/);
		AkelPad.MemCopy(lpRect + 8,  dlgX + (rcWnd.right - rcWnd.left), 3 /*DT_DWORD*/);
		AkelPad.MemCopy(lpRect + 12, dlgY + (rcWnd.top - rcWnd.bottom), 3 /*DT_DWORD*/);
		var hMonitor = oSys.Call("user32::MonitorFromRect", lpRect, 0x2 /*MONITOR_DEFAULTTONEAREST*/);

		if(hMonitor) {
			//typedef struct tagMONITORINFO {
			//  DWORD cbSize;
			//  RECT  rcMonitor;
			//  RECT  rcWork;
			//  DWORD dwFlags;
			//} MONITORINFO, *LPMONITORINFO;
			var sizeofMonitorInfo = 4 + 16 + 16 + 4;
			var lpMi = AkelPad.MemAlloc(sizeofMonitorInfo);
			if(lpMi) {
				AkelPad.MemCopy(lpMi, sizeofMonitorInfo, 3 /*DT_DWORD*/);
				oSys.Call("user32::GetMonitorInfo" + _TCHAR, hMonitor, lpMi);
				var rcWork = parseRect(lpMi + 4 + 16);
				AkelPad.MemFree(lpMi);
			}
		}
		else { //?
			oSys.Call("user32::SystemParametersInfo" + _TCHAR, 48 /*SPI_GETWORKAREA*/, 0, lpRect, 0);
			var rcWork = parseRect(lpRect);
		}
		AkelPad.MemFree(lpRect);

		if(rcWork) {
			var edge = Math.max(
				16,
				oSys.Call("user32::GetSystemMetrics", 8 /*SM_CYFIXEDFRAME*/)
					+ oSys.Call("user32::GetSystemMetrics", 4 /*SM_CYCAPTION*/)
			);

			var minX = rcWork.left - (rcWnd.right - rcWnd.left) + edge;
			var minY = rcWork.top;
			var maxX = rcWork.right - edge;
			var maxY = rcWork.bottom - edge;

			dlgX = Math.max(minX, Math.min(maxX, dlgX));
			dlgY = Math.max(minY, Math.min(maxY, dlgY));
		}

		oSys.Call("user32::SetWindowPos", hWnd, 0, dlgX, dlgY, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
	}
	function centerWindow(hWnd, hWndParent) {
		var rcWnd = getWindowRect(hWnd);
		var rcWndParent = getWindowRect(hWndParent || oSys.Call("user32::GetDesktopWindow"));
		if(!rcWndParent || !rcWnd)
			return;
		var x = rcWndParent.left + ((rcWndParent.right  - rcWndParent.left) / 2 - (rcWnd.right  - rcWnd.left) / 2);
		var y = rcWndParent.top  + ((rcWndParent.bottom - rcWndParent.top)  / 2 - (rcWnd.bottom - rcWnd.top)  / 2);
		oSys.Call("user32::SetWindowPos", hWnd, 0, x, y, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
	}
	function getWindowRect(hWnd, hWndParent) {
		var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
		if(!lpRect)
			return null;
		oSys.Call("user32::GetWindowRect", hWnd, lpRect);
		hWndParent && oSys.Call("user32::ScreenToClient", hWndParent, lpRect);
		var rcWnd = parseRect(lpRect);
		AkelPad.MemFree(lpRect);
		return rcWnd;
	}
	function parseRect(lpRect) {
		return {
			left:   AkelPad.MemRead(lpRect,      3 /*DT_DWORD*/),
			top:    AkelPad.MemRead(lpRect +  4, 3 /*DT_DWORD*/),
			right:  AkelPad.MemRead(lpRect +  8, 3 /*DT_DWORD*/),
			bottom: AkelPad.MemRead(lpRect + 12, 3 /*DT_DWORD*/)
		};
	}

	function windowText(hWnd, pText) {
		if(arguments.length > 1)
			return oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, pText);
		var len = oSys.Call("user32::GetWindowTextLength" + _TCHAR, hWnd);
		var lpText = AkelPad.MemAlloc((len + 1)*_TSIZE);
		if(!lpText)
			return "";
		oSys.Call("user32::GetWindowText" + _TCHAR, hWnd, lpText, len + 1);
		pText = AkelPad.MemRead(lpText, _TSTR);
		AkelPad.MemFree(lpText);
		return pText;
	}
	function checked(hWnd, val) {
		return arguments.length == 1
			? AkelPad.SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0)
			: AkelPad.SendMessage(hWnd, 241 /*BM_SETCHECK*/, val ? 1 /*BST_CHECKED*/ : 0, 0);
	}
	function enabled(hWnd, val) {
		oSys.Call("user32::EnableWindow", hWnd, val);
	}
	function closeDialog() {
		oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/, 0, 0);
	}
	function Scale(hDC, hWnd) {
		var hNewDC = hDC || oSys.Call("user32::GetDC", hWnd);
		if(hNewDC) {
			this._x = oSys.Call("gdi32::GetDeviceCaps", hNewDC, 88 /*LOGPIXELSX*/);
			this._y = oSys.Call("gdi32::GetDeviceCaps", hNewDC, 90 /*LOGPIXELSY*/);

			//Align to 16 pixel
			this._x += (16 - this._x % 16) % 16;
			this._y += (16 - this._y % 16) % 16;

			!hDC && oSys.Call("user32::ReleaseDC", hWnd, hNewDC);

			this.x = function(x) {
				return oSys.Call("kernel32::MulDiv", x, this._x, 96);
			};
			this.y = function(y) {
				return oSys.Call("kernel32::MulDiv", y, this._y, 96);
			};
		}
		else {
			this.x = this.y = function(n) {
				return n;
			};
		}
	}
	function createWindowEx(
		dwExStyle, lpClassName, lpWindowName, dwStyle,
		x, y, w, h,
		hWndParent, id, hInstance, callback
	) {
		return oSys.Call(
			"user32::CreateWindowEx" + _TCHAR,
			dwExStyle,
			lpClassName,
			lpWindowName,
			dwStyle,
			scale.x(x),
			scale.y(y),
			scale.x(w),
			scale.y(h),
			hWndParent,
			id,
			hInstance,
			callback || 0
		);
	}

	modal && enabled(hMainWnd, false); // Disable main window, to make dialog modal

	AkelPad.ScriptNoMutex(); // Allow other scripts running
	AkelPad.WindowGetMessage(); // Message loop

	AkelPad.WindowUnregisterClass(dialogClass);
}

function escapeRegExp(str) {
	return str.replace(/[\\\/.^$+*?|()\[\]{}]/g, "\\$&");
}

function insertNoScroll(str, selectAll) {
	noScroll(function() {
		selectAll && AkelPad.SetSel(0, -1);
		//var ss = AkelPad.GetSelStart();
		AkelPad.ReplaceSel(str, true);
		//if(ss != AkelPad.GetSelStart())
		//	AkelPad.SetSel(ss, ss + str.length);
	});
}
function noScroll(func, hWndEdit) {
	if(!hWndEdit)
		hWndEdit = AkelPad.GetEditWnd();
	var lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/);
	if(!lpPoint)
		return;
	setRedraw(hWndEdit, false);
	AkelPad.SendMessage(hWndEdit, 1245 /*EM_GETSCROLLPOS*/, 0, lpPoint);

	func();

	AkelPad.SendMessage(hWndEdit, 1246 /*EM_SETSCROLLPOS*/, 0, lpPoint);
	setRedraw(hWndEdit, true);
	AkelPad.MemFree(lpPoint);
}
function setRedraw(hWnd, bRedraw) {
	AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
	bRedraw && oSys.Call("user32::InvalidateRect", hWnd, 0, true);
}

function getOffset(hWndEdit, nType /*AEGI_*/, nOffset) {
	// Based on Instructor's code
	// http://akelpad.sourceforge.net/forum/viewtopic.php?p=11382#p11382
	var lpIndex = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
	if(!lpIndex)
		return 0;
	if(nOffset != -1)
		AkelPad.SendMessage(hWndEdit, 3137 /*AEM_RICHOFFSETTOINDEX*/, nOffset, lpIndex);
	AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, nType, lpIndex);
	nOffset = AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
	AkelPad.MemFree(lpIndex);
	return nOffset;
}

function getArg(argName, defaultVal) {
	var args = {};
	for(var i = 0, argsCount = WScript.Arguments.length; i < argsCount; ++i)
		if(/^[-\/](\w+)(=(.+))?$/i.test(WScript.Arguments(i)))
			args[RegExp.$1.toLowerCase()] = RegExp.$3 ? eval(RegExp.$3) : true;
	getArg = function(argName, defaultVal) {
		argName = argName.toLowerCase();
		return typeof args[argName] == "undefined" // argName in args
			? defaultVal
			: args[argName];
	};
	return getArg(argName, defaultVal);
}
<download | mirror | development version>
Align selected code with spaces to user defined string.
Use column selection in complex cases.


Before:

Code: Select all

var x = 0;
var someVar = 2;
var someAnotherVar = 4;
After (used "=" character):

Code: Select all

var x              = 0;
var someVar        = 2;
var someAnotherVar = 4;


Before:

Code: Select all

switch(e.type) {
	case "mousedown": f(); break;
	case "mouseup": someFunction(); break;
	case "click": someAnotherFunction(); break;
}
After "/\w+\(/" (or ":" and -sepAtStart=true):

Code: Select all

switch(x) {
	case "mousedown": f(); break;
	case "mouseup":   someFunction(); break;
	case "click":     someAnotherFunction(); break;
}
After "break":

Code: Select all

switch(x) {
	case "mousedown": f();                   break;
	case "mouseup":   someFunction();        break;
	case "click":     someAnotherFunction(); break;
}



Image Image
Last edited by Infocatcher on Wed May 07, 2014 11:25 am, edited 10 times in total.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Code: Select all

' InsertMsgBox.vbs
'========================   Описание   =====================================
' В файлах скриптинга (Vbs, Js, Au3...) вставляет соответствующую функцию MsgBox...
' выводящую информацию для проверяемой выделенной переменной или вычисляемых выражений
' Если проверяемая переменная не выделена, она выделяется
' Необходимо курсор поставить либо на переменную либо справа от неё
' Для отображения MsgBox для выражения - необходимо его выделить
'========================  Параметр ========================================
' 1 - вставка после переменной
' 2 - вставка до переменной
' 3 - вставка до и после переменной
'========================    Примеры    ====================================
' -"Вставить MsgBox после переменной" Call("Scripts::Main", 1, "InsertMsgBox.vbs", "1")  Icon("%a\AkelPadImage.dll",627)
' -"Вставить MsgBox до переменной" Call("Scripts::Main", 1, "InsertMsgBox.vbs", "2")  Icon("%a\AkelPadImage.dll",626)
' -"Вставить MsgBox до и после переменной" Call("Scripts::Main", 1, "InsertMsgBox.vbs", "3")  Icon("%a\AkelPadImage.dll",625)

' используется Functions.vbs, который следует положить ...AkelFiles\Plugs\Scripts\Include\

' Автор:           Аверин Андрей
' Версия:          1.5 (11.01.2011 - 01.09.2012)
' Mail:            Averin-And@yandex.ru
' Site:            http://tc-image.3dn.ru/forum/9-382-1157-16-1333712982
' Site:            http://akelpad.sourceforge.net/forum/viewtopic.php?p=13098#p13098
'===========================================================================
If AkelPad.GetEditWnd() = 0 Then WScript.Quit
N = 1 : k = Chr(34)
if WScript.Arguments.Length > 0 Then n = CInt(WScript.Arguments(0))
With AkelPad  Call .Include("Functions.vbs") : pName = .GetSelText() : Curs = .GetSelStart()
  If Len(pName) = 0 Then pName = GetWordLeft
  If Len(pName) = 0 Then WScript.Quit
  Call SetRedraw(.GetEditWnd(), False) : Call .SendMessage(.GetEditWnd(), 3185, 3, True)

  pExt = UCase(GetExtFile)
  If InStr("VBS;JS;AU3", pExt) = 0 Then Call EndRedraw
  Exx = ExtLine(pExt, pName)
  Select Case N
    Case 1 Text = vbNewLine & Exx : poz = PosEndLine
    Case 2 Text = Exx & vbNewLine : poz = PosBegLine
    Case 3 Text = vbNewLine & Exx : poz = PosEndLine : Text2 = Exx & vbNewLine : poz2 = PosBegLine
  End Select
  If N > 1 Then Curs = Curs + Len(Exx) + 1
  Call .SetSel(poz, poz)
  Call .ReplaceSel(Text)
  If Len(Text2) > 0 Then : Call .SetSel(poz2, poz2) : Call .ReplaceSel(Text2) : End If
  
  Call .SetSel(Curs, Curs)
  Call .SendMessage(.GetEditWnd(), 3185, 3, False)
  Call SaveEditFile : Call EndRedraw
  Call .SendMessage(.GetEditWnd(), 3376, 3, 0)
End With

' функция присваивает, расширению соответствующую функцию MsgBox ...
' есть возможность добавить своё или исправить имеющееся
Function ExtLine(Ext, Name)
  SName = Name : Slovo = "Переменная "

  if Instr(SName, """") > 0 Then
    SName = Replace(SName, k, k & " & Chr(34) & " & k) : JSName = Replace(SName, k, k & " + Chr(34) + " & k)
  End if

  Stroka = "(,&+-*^/"
  For nn = 1 To Len(Stroka)
    if Instr(SName, Mid(Stroka, nn, 1)) > 0 Then Slovo = "Выражение "
  Next
  Select Case Ext
    Case "VBS"
      Line = "MsgBox " & k & Slovo & SName & " =" & k & " & vbNewLine & " & k & "<" & k & " & " & Name & " & " & k & ">" & k
    Case "JS"
      Line = "AkelPad.MessageBox(0," & k & JSName & " =>" & k & " + " & Name & " + " & k & "<=" & k & ", " & k & Slovo & Name & k & ", 64);"
    Case "AU3"
      if Left(Name,1) <> "$" Then Name = "$" & Name
      Line = "MsgBox(4096, " & k & Slovo & k & " & " & SName & " , " & k & Name & " =>" & k & " & " & Name & " & " & k & "<=" & k & ")"
  End Select
  ExtLine = Line
End Function


Используется: Functions.vbs
Last edited by Andrey_A_A on Thu Sep 13, 2012 2:22 am, edited 4 times in total.

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

Post by VladSh »

Code: Select all

// Description(1033): Downloading a file by URL using Download Master
// Description(1049): Передача URL на закачку в Download Master; работает из контекстного меню ссылок
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13156#p13156
// Version: 1.2 (2011.08.22)
// Author: VladSh
// 
// Usage:
// 	-"Закачать при помощи DM" Call("Scripts::Main", 1, "DownloadMaster.js", `-url="%u" -cmdline="hidden=1"`);		parameters of the comandLine see: http://www.westbyte.com/dm/help/tutorial_commandline.htm
// 	-"Добавление закачки в DM..." Call("Scripts::Main", 1, "DownloadMaster.js", `-url="%u"`)
// 	-"Добавление закачки в DM..." Call("Scripts::Main", 1, "DownloadMaster.js", `-url="%u" -dmpath="%ProgramFiles%\Download Master\dmaster.exe"`)

var WshShell = new ActiveXObject("WScript.Shell");

var url = AkelPad.GetArgValue("url", "");		//URL
if (!url)
	showErrorMessage('Параметр (-url="%u") отсутствует в аргументах.', true);

var pProgram = AkelPad.GetArgValue("dmpath", "");		//ПУТЬ К ПРОГРАММЕ; сначала берём из агрументов

if (pProgram) {
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	if (fso.FileExists(pProgram) == false)
		showErrorMessage("Приложение Download Master не найдено!" + "\r" + "Путь: '" + pProgram + "'.", true);
}
else {
	pProgram = RegRead("HKCR\\Applications\\dmaster.exe\\shell\\open\\command\\");		//читаем значение по умолчанию
	if (!pProgram)
		showErrorMessage("Приложение Download Master не зарегистрировано в системе.", true);	
	pProgram = pProgram.replace('"%L"', "");
}

var commandLine = AkelPad.GetArgValue("cmdline", "");		//КОМАНДНАЯ СТРОКА
if (commandLine)
	commandLine = " " + commandLine;

WshShell.Exec(pProgram + " " + url + commandLine);


function showErrorMessage(pText, bQuit) {
	AkelPad.MessageBox(AkelPad.GetEditWnd(), pText, WScript.ScriptName, 48);
	if (bQuit) WScript.Quit();
}

function RegRead(pPath) {
	try
		{ return WshShell.RegRead(pPath); }
	catch(e)
		{ return null; }
}
Last edited by VladSh on Wed Jan 14, 2015 6:48 pm, edited 4 times in total.

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

Post by Instructor »

Merge contents of all opened documents in one file.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13246#p13246
// Version: 1.1
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): Merge contents of all opened documents in one file.
// Description(1049): Соединить содержимое всех открытых документов в один файл.
//
// Arguments:
// -Delim="\n------------------\n"     -Document escaped delimiter (default is "").
//
// Usage:
// Call("Scripts::Main", 1, "MergeDocuments.js", `-Delim="\n------------------\n"`)

//Arguments
var pDelim=AkelPad.GetArgValue("Delim", "");
if (pDelim)
  eval("pDelim=\"" + pDelim + "\";");

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var pText="";
var nIndex=0;

while (lpFrame=AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 8 /*FWF_BYTABINDEX*/, nIndex++))
{
  AkelPad.SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, lpFrame);
  pText+=AkelPad.GetTextRange(0, -1);
  if (pDelim) pText+=pDelim;
}
if (pText)
{
  AkelPad.Command(4101 /*IDM_FILE_NEW*/);
  AkelPad.ReplaceSel(pText);
  //AkelPad.Command(4106 /*IDM_FILE_SAVEAS*/);
}
Last edited by Instructor on Thu Dec 18, 2014 5:53 pm, edited 1 time in total.

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

Post by VladSh »

Code: Select all

// Description(1033): Cutting text with formatting
// Description(1049): Вырезает текст с "форматированием" (с подсветкой "синтаксиса" для текущего файла, установленной с помощью плагина Coder)
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13256#p13256
// Version: 1.4 (2011.07.21)
// Author: VladSh
// 
// Usage:
// 	-"Вырезать (с форматированием)" Call("Scripts::Main", 1, "CutFormattingText.js")

var nFLAGS = AkelPad.GetArgLine() || 48;		//по умолчанию "копировать с форматированием и заполнять текстовый буфер обмена" (16+32)

var pText = AkelPad.GetSelText() || AkelPad.SetSel(0, -1) || AkelPad.GetSelText();
if (pText) {
	if (AkelPad.Call("Coder::Settings", 4, nFLAGS) >= 0)
		AkelPad.ReplaceSel("");
}
Last edited by VladSh on Wed Jan 14, 2015 6:34 pm, edited 2 times in total.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Inserts folder name using SHBrowseForFolder function.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13311#p13311
// Version: 2015-09-19
// Author: KDJ
//
// *** Insert folder name using SHBrowseForFolder function ***
//
// Usage:
//   Call("Scripts::Main", 1, "InsertFolderName.js")

var hWndOwn = AkelPad.GetEditWnd();
if (! hWndOwn) WScript.Quit();

var oSys       = AkelPad.SystemFunction();
var sFile      = AkelPad.GetEditFile(0);
var sDir       = (sFile) ? sFile.substr(0, sFile.lastIndexOf("\\") + 1) : "";
var sText      = "Choose folder:";
var lpCallback = oSys.RegisterCallback(BFFCallback);
var lpText     = AkelPad.MemAlloc((sText.length + 1) * 2);
var lpDir      = AkelPad.MemAlloc(260 * 2); //sizeof(MAX_PATH)
var lpBrowse   = AkelPad.MemAlloc(_X64 ? 64 : 32); //sizeof(BROWSEINFO)
var lpIDL;

AkelPad.MemCopy(lpText, sText, 1 /*DT_UNICODE*/);
AkelPad.MemCopy(lpDir, sDir, 1 /*DT_UNICODE*/);

AkelPad.MemCopy(_PtrAdd(lpBrowse,              0),    hWndOwn, 2 /*DT_QWORD*/); //hwndOwner
AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ?  8 :  4),          0, 2 /*DT_QWORD*/); //pidlRoot
AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 16 :  8),      lpDir, 2 /*DT_QWORD*/); //pszDisplayName
AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 24 : 12),     lpText, 2 /*DT_QWORD*/); //lpszTitle
AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 32 : 16), 0x00000041, 3 /*DT_DWORD*/); //ulFlags = BIF_NEWDIALOGSTYLE|BIF_RETURNONLYFSDIRS
AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 40 : 20), lpCallback, 2 /*DT_QWORD*/); //lpfn
AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 48 : 24),          0, 2 /*DT_QWORD*/); //lParam
AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 56 : 28),          0, 3 /*DT_DWORD*/); //iImage

oSys.Call("Ole32::CoInitialize", 0);
lpIDL = oSys.Call("Shell32::SHBrowseForFolderW", lpBrowse);

if (lpIDL)
{
  oSys.Call("Shell32::SHGetPathFromIDListW", lpIDL, lpDir);

  sDir = AkelPad.MemRead(lpDir, 1 /*DT_UNICODE*/);

  if (sDir)
  {
    if (! /\\$/.test(sDir)) sDir += "\\";
    AkelPad.ReplaceSel(sDir, -1);
  }
}

oSys.Call("Ole32::CoTaskMemFree, lpIDL");
oSys.Call("Ole32::CoUninitialize");

oSys.UnregisterCallback(lpCallback);
AkelPad.MemFree(lpText);
AkelPad.MemFree(lpDir);
AkelPad.MemFree(lpBrowse);

function BFFCallback(hWnd, uMsg, lParam, lpData)
{
  if (uMsg == 1 /*BFFM_INITIALIZED*/)
  {
    var hWndDesk = oSys.Call("User32::GetDesktopWindow");
    var lpRect   = AkelPad.MemAlloc(16); //sizeof(RECT)
    var hWnd1;
    var hWnd2;
    var nWndX, nWndY, nWndW, nWndH;
    var nOwnX, nOwnY, nOwnW, nOwnH;
    var nDeskW, nDeskH;

    oSys.Call("User32::SetWindowTextW", hWnd, "Insert folder name");

    oSys.Call("User32::SendMessageW", hWnd, 0x0467 /*BFFM_SETSELECTIONW*/, 1, lpDir);

    //set focus to TreeView
    if (hWnd1 = oSys.Call("User32::FindWindowExW", hWnd, 0, "SHBrowseForFolder ShellNameSpace Control", 0))
    {
      if (hWnd2 = oSys.Call("User32::FindWindowExW", hWnd1, 0, "SysTreeView32", 0))
      {
        WScript.Sleep(50);
        oSys.Call("User32::PostMessageW", hWnd, 0x0028 /*WM_NEXTDLGCTL*/, hWnd2, 1);
        oSys.Call("User32::PostMessageW", hWnd2, 0x1114 /*TVM_ENSUREVISIBLE*/, 0, oSys.Call("User32::SendMessageW", hWnd2, 0x110A /*TVM_GETNEXTITEM*/, 0x0009 /*TVGN_CARET*/, 0));
      }
    }

    //center dialog
    oSys.Call("User32::GetWindowRect", hWnd, lpRect);
    nWndX = AkelPad.MemRead(_PtrAdd(lpRect,  0), 3 /*DT_DWORD*/);
    nWndY = AkelPad.MemRead(_PtrAdd(lpRect,  4), 3 /*DT_DWORD*/);
    nWndW = AkelPad.MemRead(_PtrAdd(lpRect,  8), 3 /*DT_DWORD*/) - nWndX;
    nWndH = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/) - nWndY;

    oSys.Call("User32::GetWindowRect", hWndOwn, lpRect);
    nOwnX = AkelPad.MemRead(_PtrAdd(lpRect,  0), 3 /*DT_DWORD*/);
    nOwnY = AkelPad.MemRead(_PtrAdd(lpRect,  4), 3 /*DT_DWORD*/);
    nOwnW = AkelPad.MemRead(_PtrAdd(lpRect,  8), 3 /*DT_DWORD*/) - nOwnX;
    nOwnH = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/) - nOwnY;

    oSys.Call("User32::GetWindowRect", hWndDesk, lpRect);
    nDeskW = AkelPad.MemRead(_PtrAdd(lpRect,  8), 3 /*DT_DWORD*/);
    nDeskH = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/);
    AkelPad.MemFree(lpRect);

    nWndX = nOwnX + (nOwnW - nWndW) / 2;
    nWndY = nOwnY + (nOwnH - nWndH) / 2;

    if ((nWndX + nWndW) > nDeskW)
      nWndX = nDeskW - nWndW;
    if (nWndX < 0)
      nWndX = 0;
    if ((nWndY + nWndH) > nDeskH)
      nWndY = nDeskH - nWndH;
    if (nWndY < 0)
      nWndY = 0;

    oSys.Call("User32::SetWindowPos", hWnd, 0, nWndX, nWndY, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
  }

  return 0;
}

Last edited by KDJ on Sat Sep 19, 2015 3:40 pm, edited 5 times in total.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Inserts folder name using SHBrowseForFolder function.
Alternative version with AkelPad.Include("BrowseForFolder_function.js").

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13321#p13321
// Version: 2015-09-19
// Author: KDJ
//
// *** Inserts folder name using SHBrowseForFolder function ***
//
// Alternative version with AkelPad.Include("BrowseForFolder_function.js").
// Script BrowseForFolder_function.js must be placed in directory ...\AkelPad\AkelFiles\Plugs\Scripts\Include\
//
// Usage:
//   Call("Scripts::Main", 1, "InsertFolderName_alternative.js")

var hEditWnd = AkelPad.GetEditWnd();
var sFile    = AkelPad.GetEditFile(0);
var sText    = "Choose folder:";
var sDir     = "";
var sTitle   = "Insert folder name";

if ((hEditWnd) && AkelPad.Include("BrowseForFolder_function.js"))
{
  if (sFile)
    sDir = sFile.substr(0, sFile.lastIndexOf("\\") + 1);

  sDir = BrowseForFolder(hEditWnd, sText, sDir, sTitle);

  if (sDir)
    AkelPad.ReplaceSel(sDir, -1);
}



Code: Select all

// BrowseForFolder_function.js
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13321#p13321
// Version: 2015-01-05
// Author: KDJ
//
// Call in script:
//   if (! AkelPad.Include("BrowseForFolder_function.js")) WScript.Quit();
//   sDir = BrowseForFolder(hWndOwn, sText, sIniDir, sTitle, bFiles, nPosX, nPosY);
//
// All arguments are optional:
//   hWndOwn - handle to the owner window for the dialog box, default is desktop window
//   sText   - text that is displayed above the tree view control in the dialog box, default is ""
//   sIniDir - folder/file to be selected, after calling the function, default is ""
//   sTitle  - dialog box title, default is standard title
//   bFiles  - if true, dialog box displays also files
//   nPosX   - horizontal position of the dialog in screen coordinates
//   nPosY   - vertical position of the dialog in screen coordinates
//
// Function returns string - selected folder/file name or "" if you press Cancel button

function BrowseForFolder(hWndOwn, sText, sIniDir, sTitle, bFiles, nPosX, nPosY)
{
  var sDir     = "";
  var oSys     = AkelPad.SystemFunction();
  var hWndDesk = oSys.Call("User32::GetDesktopWindow");

  try
  {
    oSys.RegisterCallback(BFFCallback);
  }
  catch (oError)
  {
    WScript.Echo("Unable to register callback function.");
    return sDir;
  }

  if (! oSys.Call("User32::IsWindow", hWndOwn))
    hWndOwn = hWndDesk;
  if (typeof sText != "string")
    sText = "";
  if (typeof sIniDir != "string")
    sIniDir = "";

  var lpText   = AkelPad.MemAlloc((sText.length + 1) * 2);
  var lpDir    = AkelPad.MemAlloc(260 * 2); //sizeof(MAX_PATH)
  var lpBrowse = AkelPad.MemAlloc(_X64 ? 64 : 32); //sizeof(BROWSEINFO)
  var nFlags   = 0x00000041 /*BIF_NEWDIALOGSTYLE|BIF_RETURNONLYFSDIRS*/ | (bFiles ? 0x00004000 /*BIF_BROWSEINCLUDEFILES*/ : 0);
  var lpIDL;

  AkelPad.MemCopy(lpText, sText, 1 /*DT_UNICODE*/);
  AkelPad.MemCopy(lpDir, sIniDir, 1 /*DT_UNICODE*/);

  AkelPad.MemCopy(_PtrAdd(lpBrowse,              0),     hWndOwn, 2 /*DT_QWORD*/); //hWndOwner
  AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ?  8 :  4),           0, 2 /*DT_QWORD*/); //pidlRoot
  AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 16 :  8),       lpDir, 2 /*DT_QWORD*/); //pszDisplayName
  AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 24 : 12),      lpText, 2 /*DT_QWORD*/); //lpszTitle
  AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 32 : 16),      nFlags, 3 /*DT_DWORD*/); //ulFlags
  AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 40 : 20), BFFCallback, 2 /*DT_QWORD*/); //lpfn
  AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 48 : 24),           0, 2 /*DT_QWORD*/); //lParam = lpData in callback function
  AkelPad.MemCopy(_PtrAdd(lpBrowse, _X64 ? 56 : 28),           0, 3 /*DT_DWORD*/); //iImage

  if (lpIDL = oSys.Call("Shell32::SHBrowseForFolderW", lpBrowse))
  {
    oSys.Call("Shell32::SHGetPathFromIDListW", lpIDL, lpDir);
    oSys.Call("Ole32::CoTaskMemFree", lpIDL);
    sDir = AkelPad.MemRead(lpDir, 1 /*DT_UNICODE*/);
  }

  oSys.UnregisterCallback(BFFCallback);
  AkelPad.MemFree(lpText);
  AkelPad.MemFree(lpDir);
  AkelPad.MemFree(lpBrowse);

  return sDir;

  function BFFCallback(hWnd, uMsg, lParam, lpData)
  {
    if (uMsg == 1 /*BFFM_INITIALIZED*/)
    {
      var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
      var hWnd1;
      var hWnd2;
      var nPosW, nPosH;
      var nOwnX, nOwnY, nOwnW, nOwnH;
      var nDeskW, nDeskH;

      if (typeof sTitle == "string")
        oSys.Call("User32::SetWindowTextW", hWnd, sTitle);

      AkelPad.SendMessage(hWnd, 0x0467 /*BFFM_SETSELECTIONW*/, 1, lpDir);

      //set focus to TreeView
      if (hWnd1 = oSys.Call("User32::FindWindowExW", hWnd, 0, "SHBrowseForFolder ShellNameSpace Control", 0))
      {
        if (hWnd2 = oSys.Call("User32::FindWindowExW", hWnd1, 0, "SysTreeView32", 0))
        {
          WScript.Sleep(50);
          oSys.Call("User32::PostMessageW", hWnd, 0x0028 /*WM_NEXTDLGCTL*/, hWnd2, 1);
          oSys.Call("User32::PostMessageW", hWnd2, 0x1114 /*TVM_ENSUREVISIBLE*/, 0, AkelPad.SendMessage(hWnd2, 0x110A /*TVM_GETNEXTITEM*/, 0x0009 /*TVGN_CARET*/, 0));
        }
      }

      if ((typeof nPosX != "number") || (typeof nPosY != "number"))
      {
        //center dialog
        oSys.Call("User32::GetWindowRect", hWnd, lpRect);
        nPosX = AkelPad.MemRead(_PtrAdd(lpRect,  0), 3 /*DT_DWORD*/);
        nPosY = AkelPad.MemRead(_PtrAdd(lpRect,  4), 3 /*DT_DWORD*/);
        nPosW = AkelPad.MemRead(_PtrAdd(lpRect,  8), 3 /*DT_DWORD*/) - nPosX;
        nPosH = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/) - nPosY;

        oSys.Call("User32::GetWindowRect", hWndOwn, lpRect);
        nOwnX = AkelPad.MemRead(_PtrAdd(lpRect,  0), 3 /*DT_DWORD*/);
        nOwnY = AkelPad.MemRead(_PtrAdd(lpRect,  4), 3 /*DT_DWORD*/);
        nOwnW = AkelPad.MemRead(_PtrAdd(lpRect,  8), 3 /*DT_DWORD*/) - nOwnX;
        nOwnH = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/) - nOwnY;

        oSys.Call("User32::GetWindowRect", hWndDesk, lpRect);
        nDeskW = AkelPad.MemRead(_PtrAdd(lpRect,  8), 3 /*DT_DWORD*/);
        nDeskH = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/);
        AkelPad.MemFree(lpRect);

        nPosX = nOwnX + (nOwnW - nPosW) / 2;
        nPosY = nOwnY + (nOwnH - nPosH) / 2;

        if ((nPosX + nPosW) > nDeskW)
          nPosX = nDeskW - nPosW;
        if (nPosX < 0)
          nPosX = 0;
        if ((nPosY + nPosH) > nDeskH)
          nPosY = nDeskH - nPosH;
        if (nPosY < 0)
          nPosY = 0;
      }

      oSys.Call("User32::SetWindowPos", hWnd, 0, nPosX, nPosY, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
    }

    return 0;
  }
}
Last edited by KDJ on Sat Sep 19, 2015 3:41 pm, edited 11 times in total.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Code: Select all

' Descript.vbs
'========================   Описание   =====================================
' Внесение выделенного текста в файл комментариев Descript.ion
' если ничего не выделено, в комментарий вносится часть строки, от курсора вправо
'=======================   Параметры  ======================================
' Один параметр:
'    0 - (или ничего) - открыть файл Descript.ion (если его нет - создать и открыть)
'    1 - внести выделенный текст в комментарии (если коммент. есть для этого файла - заменить)
'    2 - внести выделенный текст в комментарии и открыть файл
'    3 - Удалить комментарии несуществующих файлов\папок
'    4 - Дать полную информацию:
'       - открыть файл
'       - отобразить в новой вкладке каким файлам\папкам присвоены комментарии
'       - отобразить в новой вкладке каким файлам\папкам не присвоены комментарии
'       - отобразить в новой вкладке лишние комментарии (оставшиеся после удаления файла\папки)
' (если документ не имеет имени ничего не происходит)
'========================   Примеры   ======================================
'  "&Комментарии..." Icon("%a\AkelPadImage.dll",557)
'  {
'   -"Открыть файл Descript.ion" Call("Scripts::Main", 1, "Descript.vbs")
'   -"Внести выделенный текст в комментарии Shift+Alt+C" Call("Scripts::Main", 1, "Descript.vbs", `"1"`) 
'   -"Внести выделенный текст в комментарии +" Call("Scripts::Main", 1, "Descript.vbs", `"2"`)
'   -"Удалить комментарии несуществующих ф\п" Call("Scripts::Main", 1, "Descript.vbs", `"3"`)
'   -"Дать полную информацию о Descript.ion" Call("Scripts::Main", 1, "Descript.vbs", `"4"`)
'  }

' используется Functions.vbs, который следует положить .в ..AkelFiles\Plugs\Scripts\Include\

' Автор:           Аверин Андрей
' Версия:          1.5 (28.04.2011 - 08.09.2012)
' Mail:            Averin-And@yandex.ru
' Site:            http://tc-image.3dn.ru/forum/9-421-1208-16-1333826782
' Site:            http://akelpad.sourceforge.net/forum/viewtopic.php?p=13346#p13346
'===========================================================================
File = AkelPad.GetEditFile(0)
If Len(File) = 0 Then WScript.Quit ' если документ не имеет имени

Set FSO = CreateObject("Scripting.FileSystemObject")
Call AkelPad.Include("Functions.vbs")

dPath = FSO.GetParentFolderName(File)
dFile = dPath & "\descript.ion" : pText = ""

If Not FSO.FileExists(DFile) Then
  Call FSO.CreateTextFile(DFile)
  With FSO.GetFile(DFile) .Attributes = .Attributes Or 38 End With
End If

fName = FSO.GetFileName(File) : nS = 0

If WScript.Arguments.Count = 0 Then
  k = 0
Else
  k = WScript.Arguments(0)
End If

Select Case k
  Case 0 Call AkelPad.OpenFile(dFile)
  Case 1 Call WriteFile(dFile, fName)
  Case 2 Call WriteFile(dFile, fName) : Call AkelPad.OpenFile(dFile)
  Case 3 Call ClearFile(dFile, dPath, 1)
  Case 4 Call ClearFile(dFile, dPath, 2) : Call AkelPad.OpenFile(dFile)
End Select

' функция записи выделенного (или части строки) комментария
Sub WriteFile(fDesc, Name) tText = AkelPad.GetSelText()
  If Len(tText) = 0 Then tText = GetLineRight ' если ничего не выделено, выделяется строка вправо от курсора
  If Len(tText) = 0 Then WScript.Quit ' если ничего не выделено
  If InStr(tText, chr(13)) > 0 Then
    Txt = Split(tText, chr(13))
    iTxt = Name & " ' " & Join(Txt, "\n") & "\nВ"
  Else
    iTxt = Name & " ' " & tText & "\nВ" ' уберите из строки  & "\nВ"   если не нужен перенос в комментарии
  End If
  On Error Resume Next
  pText =  FSO.OpenTextFile(fDesc).ReadAll
  If Len(pText) > 0 Then
    List = Split(pText, vbNewLine)
    For i = 1 To Ubound(List) + 1
      If UCase(Name & Chr(32)) = UCase(Left(List(i - 1), Len(Name) + 1)) Then
        nS = i : Exit For
      End If
    Next
    If nS > 0 Then
      List(nS - 1) = iTxt : Text = Join(List, vbNewLine)
    Else
      Text = Join(List, vbNewLine)  & vbNewLine & iTxt
    End If
    Text = Selecting(Text)
  Else
    Text = iTxt & vbNewLine
  End If
  Text = Replace(Text, vbNewLine & vbNewLine, vbNewLine)
  FSO.OpenTextFile(fDesc, 2).Write Text
End Sub

Sub ClearFile(fD, dP, s)
  cList = Split(FSO.OpenTextFile(fD).ReadAll, vbNewLine)
  On Error Resume Next
  Set Folder = FSO.GetFolder(dP)
  For Each Files In Folder.Files
    nList = nList & Files.Name & " ;"
  Next

  For Each Folder In Folder.SubFolders
    nList = nList & Folder.Name & " ;"
  Next

  sLst = Split(nList, ";") : n = 0
  For i = 0 To Ubound(sLst) ' массив папок и файлов
    For j = 0 To Ubound(cList) ' массив комментариев
      If Len(cList(j)) > 0 And Len(sLst(i)) > 0Then
        if UCase(sLst(i)) = UCase(Left(cList(j), Len(sLst(i)))) Then
          n = 1 : oText = oText & cList(j)  & vbNewLine : cList(j) = "" : Exit For
        End If
      End If
    Next
    If n = 0 Then noText = noText & sLst(i) & vbNewLine : n = 0
  Next

  oText = Selecting(oText)
  If s = 1 Then
    FSO.OpenTextFile(fD, 2).Write oText
  Else
    For i = 0 To Ubound(cList)
      If Len(cList(i)) > 0 Then mText = mText & cList(i) & vbNewLine
    Next
    noText = "Для этих файлов\папок комментарии не установлены" & vbNewLine & String(90, "-") & vbNewLine & Selecting(noText)
    mText = "Комментарии для этих файлов\папок установлены, но файлов\папок нет" & vbNewLine & String(90, "-") & vbNewLine & Selecting(mText)

    Call ReplSel(oText) : Call ReplSel(noText) : Call ReplSel(mText)
  End If
End Sub

Sub ReplSel(xText)
    With AkelPad
      Call .SendMessage(.GetMainWnd(), 273, 4101, 0)
      Call SetRedraw(.GetEditWnd(), False)
      Call .ReplaceSel(Replace(xText, vbNewLine & vbNewLine, vbNewLine))
      Call .SendMessage(.GetEditWnd(), 3087, False, 0)
      Call .SendMessage(.GetEditWnd(), 3079, 0, 0)
      Call .SetSel(0, 0)
      Call SetRedraw(.GetEditWnd(), True)
    End With
End Sub


Используется: Functions.vbs

Значки для скрипта:

Code: Select all

MIME-Version: 1.0
Content-Type: application/octet-stream; name="Descript.dll"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Descript.dll"

TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAsAAAAA4fug4AtAnNIbgBTM0hVGhpcyBpcyAzMi1iaXQgcmVzb3VyY2UgZGxsLg0NCgAAAAAA
AAAAAAAAJAAAAAAAAAAp5wHbbYZviG2Gb4hthm+IqoBpiGyGb4gypGWIbIZviFJpY2hthm+IAAAA
AAAAAABQRQAATAEBAAyj6DoAAAAAAAAAAOAADwELAQYAAAAAAJAYAAAAAAAAAAAAAAACAAAAAgAA
AABAABAAAAAQAAAABAAAAAAAAAAEAAAAAAAAAJAaAAAAAgAAAAAAAAIAAAAAABAAABAAAAAAEAAA
EAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAIwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5yc3JjAAAAjBgAAAACAACQGAAAAAIAAAAAAAAAAAAA
AAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAQAAAAAAAIAAwAAACAAAIAOAAAAWAAAgAAAAAAAAAAABAAAAAAABQABAAAAkAAAgAIA
AACoAACAAwAAAMAAAIAEAAAA2AAAgAUAAADwAACAAAAAAAAAAAAEAAAAAAAFAAEAAAAIAQCAAgAA
ACABAIADAAAAOAEAgAQAAABQAQCABQAAAGgBAIAAAAAAAAAAAAQAAAAAAAEAAAAAAIABAAAAAAAA
AAAAAAQAAAAAAAEAAAAAAJABAAAAAAAAAAAAAAQAAAAAAAEAAAAAAKABAAAAAAAAAAAAAAQAAAAA
AAEAAAAAALABAAAAAAAAAAAAAAQAAAAAAAEAAAAAAMABAAAAAAAAAAAAAAQAAAAAAAEAAAAAANAB
AAAAAAAAAAAAAAQAAAAAAAEAAAAAAOABAAAAAAAAAAAAAAQAAAAAAAEAAAAAAPABAAAAAAAAAAAA
AAQAAAAAAAEAAAAAAAACAAAAAAAAAAAAAAQAAAAAAAEAAAAAABACAAAgBAAAaAQAAOQEAAAAAAAA
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
wtyI/7/ZiP/E3In/xdqJ/8Xaif/E3In/wdmI/8HZh//I54f/7u78/wAAAKYAAAALtbPQmm+mAP9v
gAD/gZMA/5GkAP+asAD/o7oA/6a8AP+iuAD/nbMA/5OpAP+HmgD/dIcA/4CSAP/1+P//AAAAPcbC
6MtfbwD/eowA/4ygAP+asAD/qsEA/4SYAP9ijAD/n7QA/6rBAP+itwD/laoA/4eaAP9cbAD/1fGW
/wAAAFvQy/HLX28A/2+AAP+AkgD/jqIA/2JxAP/x6P///////22ICv+TqQD/kaQA/4SYAP93iQD/
WGcA/9fun/8AAABa2tb7y19vAP9ldgD/dIcA/1tqAP/58v//////////////////YHAA/4eaAP96
jAD/b4AA/1RiAP/j+6T/AAAAWuHe/8tldgD/X28A/1RjAP/g1fL/2cje//Ls+f/NxMn/7OXv/9rP
4P9bagD/b4AA/2V0AP9UYwD/5/+r/wAAAFrq5v/Lb4AA/05cAP/Qxsz/uqrC/+7o/f92hwD/WGcA
//Hq/f/i2en/o6dg/1ZmAP9ldgD/X28A/+//sf8AAABa5OP/y3SHAP9gcAD///////////+YpBj/
gZMA/4SYAP+4wmL///////////+EkwD/gJIA/21+AP/t/67/AAAAWt7c/8uOsAD/qrgA/5GiAP+R
ogD/n7AA/6S0AP+ktAD/gZMA////9f///////////4GSAP+ktwD/7f+p/wAAAFrV0vLLlsEA/7/L
HP+7yxf/u8sX/7jIGP+4yBj/uMgY/7zMF/+RoAD////////////r7cj/sMIA/+7/pP8AAABayMbn
y6vSAP/X5EP/1eM+/9XjPv/V4z7/1eM+/9XjPv/V4z7/2ecv/6m0Q///////0Nef/9LkIf/g+5j/
AAAAWre32cvE7QD/8fxl/+r4XP/q+Fz/6vhc/+r4XP/q+Fz/6vhc/+r4XP/t+1T/yNU2/+b0Tf/1
/1z/3PSR/wAAAFy3tNDFs9cG////kv///4n///+J////if///4n///+J////if///4n///+J////
iP///4z///96/8bejP8AAABFq6u4Y2Z3PP+kvBX/q8Qe/6nCHv+pwh7/qcIe/6nCHv+pwh7/qcIe
/6nCHv+qwh7/rsUe/22MAf+EfZjuAAAAAAAAAACwrrdjqanBxKSgt8yioLfLoqC3y6Kgt8uioLfL
oqC3y6Kgt8uioLfLoqC3y6Siusu1s8SZAAAAAwAAAADAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACAAQAAKAAAABAAAAAgAAAAAQAgAAAA
AABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAFwAAABaAAAAWgAAAFoAAABaAAAA
WgAAAFoAAABaAAAAWgAAAFsAAAA9AAAACwAAAAAAAAADoIN67qDV7v+Dvtn/hsHc/4i+2P+Iw9v/
h8Pa/4fD2v+Iw9v/iMHY/4bA2P+GyOb/++3t/wAAAKYAAAAL0LWzmgBvpv8Ab4D/AIGT/wCSpP8A
mbD/AKO6/wClvP8Aobj/AJ2z/wCSqf8Ah5r/AHSH/wCBkv//9fj/AAAAPejEwMsAYG//AHqM/wCM
oP8AmbD/AKrB/wCDmP8AYoz/AKC0/wCqwf8Aorf/AJWq/wCHmv8AXGz/lNPx/wAAAFvx0cvLAGBv
/wBvgP8AgZL/AI6i/wBhcf//8Ob//////whriP8Akqn/AJKk/wCDmP8Adon/AFdn/5/Y7v8AAABa
+9jUywBgb/8AZXb/AHSH/wBbav//+fL/////////////////AGFw/wCHmv8Aeoz/AG+A/wBVYv+k
4/v/AAAAWv/h3ssAZXb/AGBv/wBUY//y39P/3dnH//jx6//JzcT/7+zl/+Dbz/8AW2r/AG+A/wBl
dP8AVGP/qeb//wAAAFr/6eTLAG+A/wBPXP/M0Mb/wrmo//3s5v8Adof/AFdn//3w6P/o4dj/YKKl
/wBWZv8AZXb/AGBv/7Hv//8AAABa/+PjywB0h/8AYXD///////////8YmKT/AIGT/wCDmP9ht8H/
//////////8AhZP/AIGS/wBtfv+u7v//AAAAWv/e3MsAjrD/AKq4/wCRov8AkaL/AJ+w/wCltP8A
pbT/AIGT//X//////////////wCBkv8Apbf/p+v//wAAAFry1NLLAJbB/xq+y/8XvMv/F7zL/xi3
x/8Yt8f/GLfH/xe8zP8AkaD////////////I6+3/ALHC/6Pu//8AAABa5sbFywCq0v9C1eP/PtPh
/z7T4f8+0+H/PtPh/z7T4f8+0+H/L9jl/0OptP//////n9DX/yHS4v+Y3/n/AAAAWte3t8sAxO3/
ZPD7/1rp+P9a6fj/Wun4/1rp+P9a6fj/Wun4/1rp+P9U7vv/NMjV/0vm9P9c9P//j9z0/wAAAFzQ
tbPFBrPX/5L9/f+H////h////4f///+H////h////4f///+H////h////4b///+M/f3/ev///4zG
3v8AAABFuKurYztldv8Torz/HqvE/x2pwv8dqcL/HanC/x2pwv8dqcL/HanC/x2pwv8dqcL/Hq7F
/wBtjP+Yg3vuAAAAAAAAAAC2r61jwaenxLekoMy3oqDLt6Kgy7eioMu3oqDLt6Kgy7eioMu3oqDL
t6Kgy7qkosvEtbOZAAAAAwAAAADAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAABAACAAQAAAAABAAEAEBAAAAEAIABoBAAAAQAAAAEAAQAQEAAA
AQAgAGgEAAACAAAAAQABABAQAAABACAAaAQAAAMAAAABAAEAEBAAAAEAIABoBAAABAAAAAEAAQAQ
EAAAAQAgAGgEAAAFAFBBREQ=

Last edited by Andrey_A_A on Thu Sep 13, 2012 2:18 am, edited 6 times in total.

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

Post by VladSh »

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13573#13573
// Description(1033): Copies the name of the script in BBCode, substituting in URL is first found the link in edit window
// Description(1049): Копирует название скрипта в BBCode, подставляя в URL первую найденную в окне редактирования ссылку
// Version: 1.6 (2014.12.17)
// Author: VladSh
// 
// Usage:
// 	-"Имя как BBCode" Call("Scripts::Main", 1, "ScriptNameCopyAsBBCode.js", `"%f"`)		- для контекстных меню вкладок и последних файлов, но для текущего файла можно вызывать и из окна скриптов

var pFileName = AkelPad.GetArgLine() || AkelPad.GetEditFile(0);

if (pFileName) {
	if (! AkelPad.Include("CommonFunctions.js")) WScript.Quit();
	var pURL = getFileContent(pFileName, true, 500, "");
	if (pURL)
		pURL = getFirstLink(pURL);
	pFileName = getFileName(pFileName);
	var result = "[url=" + pURL + "]" + pFileName + "[/url]";
	AkelPad.SetClipboardText(result);
}
else
	AkelPad.MessageBox(AkelPad.GetEditWnd(), "Имя файла не задано. Сохраните файл и попробуйте снова...", WScript.ScriptName, 0 /*MB_OK*/ + 48);

function getFirstLink(pText) {
	var pResult = "";
	var nIndex = pText.search(/http:|https:/);
	if (nIndex != -1) {
		pResult = pText.slice(nIndex);
		nIndex = pResult.search(/\s|'|"/i);
		pResult = pResult.slice(0, nIndex);
	}
	return pResult;
}


Code: Select all

// Description(1049): Копирует содержимое файла в определённую структуру [] для выкладки на форум
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13573#13573
// Version: 1.4 (2015.01.14)
// Author: VladSh
// 
// Arguments:
// 	-file="%f" - ссылка на файл
// 	-block - наименование тэга контейнера
// 	-bold ([0]/1) - "жирное" наименование скрипта
// 
// Usage:
// 	-"Содержимое файла в [more]..."  Call("Scripts::Main", 1, "ScriptCopyToBlock.js", `-file="%f"`)
// 	-"Содержимое файла в [spoiler]..."  Call("Scripts::Main", 1, "ScriptCopyToBlock.js", `-file="%f" -block="spoiler"`)

var pFileName = AkelPad.GetFilePath(AkelPad.GetArgValue("file", ""), 2 /*CPF_FILENAME*/);

var pBlockName = AkelPad.GetArgValue("block", "more");
var bOpen = ""; var bClose = "";
var b = AkelPad.GetArgValue("bold", 0);
if (b) {
	bOpen = "[b]";
	bClose = "[/b]";
}
var pScript = bOpen + '[' + pBlockName + '="' + pFileName + '"]' + bClose + '\r[code]' + AkelPad.GetTextRange(0, -1) + '[/code][/' + pBlockName + ']';
if (pScript)
	AkelPad.SetClipboardText(pScript);
Last edited by VladSh on Wed Jan 14, 2015 9:58 pm, edited 14 times in total.

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

Post by Instructor »

This script is extended analog for the Insert() method.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13628#p13628
// Version: 1.2
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): This script is extended analog for the Insert() method.
// Description(1049): Данный скрипт - это расширенный аналог метода Insert().
//
// Escape-sequences:
//   \\ - \ character;
//   \t - Tabulation;
//   \r\n - New line;
//   \r - New line;
//   \n - New line;
//   \s - Selection;
//   \c - Clipboard;
//   \| - Caret position after insertion;
//   \[ - Selection start position after insertion;
//   \] - Selection end position after insertion.
//
// Usage:
// Call("Scripts::Main", 1, "Insert.js", `<a href="\c">\[\s\]</a>`)

var hMainWnd=AkelPad.GetMainWnd();
var pArgLine=AkelPad.GetArgLine(0);
var nInsertPos;
var nSelStart;
var nSelEnd;

pArgLine=pArgLine.replace(/\\\\/g, "\0");
if (pArgLine.search(/\\[^rntsc\\\|\[\]]/g) != -1)
{
  AkelPad.MessageBox(hMainWnd, "Syntax error", WScript.ScriptName, 16 /*MB_ICONERROR*/);
  WScript.Quit();
}
pArgLine=pArgLine.replace(/\\r\\n|\\r|\\n/g, "\n");
pArgLine=pArgLine.replace(/\\t/g, "\t");
if (pArgLine.search(/\\s/g) != -1)
  pArgLine=pArgLine.replace(/\\s/g, AkelPad.GetSelText());
if (pArgLine.search(/\\c/g) != -1)
  pArgLine=pArgLine.replace(/\\c/g, AkelPad.GetClipboardText());

//Selection after insertion
if ((nSelStart=pArgLine.search(/\\\|/g)) != -1)
{
  pArgLine=pArgLine.replace(/\\\|/g, "");
  nSelEnd=nSelStart;
}
else if ((nSelStart=pArgLine.search(/\\\[/g)) != -1)
{
  pArgLine=pArgLine.replace(/\\\[/g, "");
  if ((nSelEnd=pArgLine.search(/\\\]/g)) != -1)
    pArgLine=pArgLine.replace(/\\\]/g, "");
}
pArgLine=pArgLine.replace(/\0/g, "\\");

//Replace selection
nInsertPos=AkelPad.GetSelStart();
AkelPad.ReplaceSel(pArgLine);
if (nSelStart != -1)
  AkelPad.SetSel(nInsertPos + nSelStart, nInsertPos + (nSelEnd != -1?nSelEnd:nSelStart));
Last edited by Instructor on Thu Dec 18, 2014 5:55 pm, edited 1 time in total.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Code: Select all

' CreateLink.vbs
'========================   Описание   =====================================
' Создание ярлыка папки/файла открытого на редактирование
'========================  Параметры =======================================
' 1-й параметр: Путь\где\создавать\ярлык (по умолчанию Рабочий стол) (можно использовать относительные пути)
' 2-й параметр:
'    0 - для файла
'    1 - для папки
' любой 3-й параметр создаст ярлык для AkelPad.exe
'========================    Примеры    ====================================
'  "&Ярлыки..." Icon("a%\AkelFiles\Plugs\Link.dll",2)
'   {
' -"Создать ярлык файла на Рабочем столе" Call("Scripts::Main", 1, "CreateLink.vbs", `"" "0"`) Icon("a%\AkelFiles\Plugs\Link.dll",1)
' -"Создать ярлык файла в панели ''Быстрого запуска''" Call("Scripts::Main", 1, "CreateLink.vbs", `"%%APPDATA%%\Microsoft\Internet Explorer\Quick Launch" "0"`) Icon("a%\AkelFiles\Plugs\Link.dll",3)
'   SEPARATOR
' -"Создать ярлык папки на Рабочем столе" Call("Scripts::Main", 1, "CreateLink.vbs", `"" "1"`) Icon("a%\AkelFiles\Plugs\Link.dll",529)
' -"Создать ярлык папки в панели ''Быстрого запуска''" Call("Scripts::Main", 1, "CreateLink.vbs", `"%%APPDATA%%\Microsoft\Internet Explorer\Quick Launch" "1"`) Icon("a%\AkelFiles\Plugs\Link.dll",0)
' -"Создать ярлык папки в панели ''Отправить в...''" Call("Scripts::Main", 1, "CreateLink.vbs", `"%%APPDATA%%\Microsoft\Windows\SendTo" "1"`) Icon("a%\AkelFiles\Plugs\Link.dll",0)
' -"Создать ярлык папки в панели ''Ссылки на папки''" Call("Scripts::Main", 1, "CreateLink.vbs", `"%%USERPROFILE%%\Links" "1"`) Icon("a%\AkelFiles\Plugs\Link.dll",0)
'   }

' используется Functions.vbs, который следует положить в ...AkelFiles\Plugs\Scripts\Include\

' Автор:           Аверин Андрей
' Версия:          1.1 (18.07.2011 - 12.08.2012)
' Mail:            Averin-And@yandex.ru
' Site:            http://tc-image.3dn.ru/forum/9-345-1067-16-1333460103
' Site:            http://akelpad.sourceforge.net/forum/viewtopic.php?p=13649#p13649
'===========================================================================
File = AkelPad.GetEditFile(0)
With WScript
  Cnt = .Arguments.Count
  If Cnt > 0 Then
    Path = .Arguments(0)
    If Cnt > 1 Then
      Param = .Arguments(1) : If Cnt > 2 Then File = AkelPad.GetAkelDir(0) & "\AkelPad.exe"
    End If  
  End If
End With

If Len(File) = 0 Then WScript.Quit
Call AkelPad.Include("Functions.vbs")
Set WSH = CreateObject("WScript.Shell")

If Len(Path) = 0 Then
  Path = WSH.SpecialFolders("Desktop")
Else
  If InStr(Path, "%") > 0 Then Path = GetPath(Path)
End If
If Len(Param) = 0 Then Param = 0

With CreateObject("Scripting.FileSystemObject")
  If Param = 1 Then File = .GetParentFolderName(File)
  Name = .GetBaseName(File)
  Dir = .GetParentFolderName(File)
End With

With WSH.CreateShortcut( Path & "\" & Name & ".lnk")
  .Arguments = ""
  .Description = ""
  .IconLocation = ",0"
  .TargetPath = File
  .WindowStyle = 1
  .WorkingDirectory = Dir
  .Save
End With

Set WSH = Nothing : WScript.Quit


Значки для скритпта:

Code: Select all

MIME-Version: 1.0
Content-Type: application/octet-stream; name="Link.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Link.zip"

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
bFBLBQYAAAAAAQABADYAAAAICAAAAAA=
Last edited by Andrey_A_A on Thu Sep 13, 2012 2:13 am, edited 1 time in total.

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

Post by Instructor »

Get composition number members. For example: 0x7 is expaned to 0x1|0x2|0x4 and 7 expaned to 1+2+4.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13770#p13770
// Version: 1.1
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): Get composition number members. For example: 0x7 is expaned to 0x1|0x2|0x4 and 7 expaned to 1+2+4.
// Description(1049): Получить составные части числа. Например: 0x7 разворачивается в 0x1|0x2|0x4 и 7 разворачивается в 1+2+4.
//
// Arguments:
// -Template="${m16}"  -output string template (default is "${n10}=${m10}${newline}${n16}=${m16}"). Variables:
//                        ${n10}     -decimal number.
//                        ${m10}     -decimal members.
//                        ${n16}     -hexadecimal number.
//                        ${m16}     -hexadecimal members.
//                        ${newline} -new line.
// -Output=1           -output string to (one of the following):
//                        0  edit window (default).
//                        1  clipboard.
//                        2  Log::Output panel.
//
// Usage:
// Call("Scripts::Main", 1, "GetNumberMembers.js", `-Template="${m10}" -Output=1`)

//Arguments
var pTemplate=AkelPad.GetArgValue("Template", "${n10}=${m10}${newline}${n16}=${m16}");
var nOutput=AkelPad.GetArgValue("Output", 0);

//Variables
var pSelText=AkelPad.GetSelText();
var dwInitNumber=parseInt(pSelText);

if (dwInitNumber)
{
  var pInitNumber10="" + dwInitNumber.toString(10);
  var pInitNumber16="0x" + dwInitNumber.toString(16);
  var pMembers10="";
  var pMembers16="";
  var dwNumber=dwInitNumber;
  var dwCount;

  for (dwCount=0x00000001; dwCount <= 0x80000000; dwCount*=2)
  {
    if (dwNumber & dwCount)
    {
      pMembers10+=(dwNumber == dwInitNumber?"":"+") + dwCount.toString(10);
      pMembers16+=(dwNumber == dwInitNumber?"0x":"|0x") + dwCount.toString(16);
      if (!(dwNumber=dwNumber & ~dwCount))
        break;
    }
  }
  pTemplate=pTemplate.replace(/\$\{n10\}/g, pInitNumber10);
  pTemplate=pTemplate.replace(/\$\{m10\}/g, pMembers10);
  pTemplate=pTemplate.replace(/\$\{n16\}/g, pInitNumber16);
  pTemplate=pTemplate.replace(/\$\{m16\}/g, pMembers16);
  pTemplate=pTemplate.replace(/\$\{newline\}/g, "\n");

  if (nOutput == 0)
    AkelPad.ReplaceSel(pTemplate);
  else if (nOutput == 1)
    AkelPad.SetClipboardText(pTemplate);
  else if (nOutput == 2)
    AkelPad.Call("Log::Output", 4, pTemplate);
}
Last edited by Instructor on Thu Apr 09, 2015 6:29 am, edited 2 times in total.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Mapping network drives:
- in local network,
- in web site via http and WebDAV protocols.

This script can be run in AkelPad window or directly, in the command line.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13784#p13784
// Version: 2016-08-05
// Author: KDJ
//
// *** Mapping network drives ***
//
// Run in AkelPad window:
//   Call("Scripts::Main", 1, "MapNetDrive.js")
// Run from command line (after registration: regsvr32.exe Scripts.dll):
//   wscript.exe MapNetDrive.js
//
// Shortcut keys in dialog box:
//   Enter     - map drive
//   Del       - disconnect network drive (Remove)
//   Shift+Del - delete mapping parameter from the list
//   Alt+1     - set focus to Drives list box
//   Alt+2     - set focus to Parameters list box

if (typeof AkelPad == "undefined")
{
  try
  {
    AkelPad = new ActiveXObject("AkelPad.Document");
    _PtrAdd = function(n1, n2) {return AkelPad.Global._PtrAdd(n1, n2);};
    _TCHAR  = AkelPad.Constants._TCHAR;
    _TSTR   = AkelPad.Constants._TSTR;
    _TSIZE  = AkelPad.Constants._TSIZE;
  }
  catch (oError)
  {
    WScript.Echo("You need register Scripts.dll");
    WScript.Quit();
  }
}

var oSys     = AkelPad.SystemFunction();
var hInstDLL = AkelPad.GetInstanceDll();
var sClass   = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstDLL;
var hDlg;

if (hDlg = oSys.Call("User32::FindWindowEx" + _TCHAR, 0, 0, sClass, 0))
{
  if (! oSys.Call("User32::IsWindowVisible", hDlg))
    oSys.Call("User32::ShowWindow", hDlg, 8 /*SW_SHOWNA*/);
  if (oSys.Call("User32::IsIconic", hDlg))
    oSys.Call("User32::ShowWindow", hDlg, 9 /*SW_RESTORE*/);

  oSys.Call("User32::SetForegroundWindow", hDlg);
  WScript.Quit();
}

var DT_DWORD        = 3;
var LB_ADDSTRING    = 0x0180;
var LB_DELETESTRING = 0x0182;
var LB_RESETCONTENT = 0x0184;
var LB_SETCURSEL    = 0x0186;
var LB_GETCURSEL    = 0x0188;
var LB_GETTEXT      = 0x0189;
var LB_SETTABSTOPS  = 0x0192;
var LBN_SELCHANGE   = 1;
var LBN_DBLCLK      = 2;

var hIconSmall = oSys.Call("User32::LoadImage" + _TCHAR,
                   hInstDLL, //hinst
                   101,      //lpszName
                   1,        //uType=IMAGE_ICON
                   16,       //cxDesired
                   16,       //cyDesired
                   0);       //fuLoad
var hIconBig = oSys.Call("User32::LoadImage" + _TCHAR,
                 hInstDLL, //hinst
                 101,      //lpszName
                 1,        //uType=IMAGE_ICON
                 32,       //cxDesired
                 32,       //cyDesired
                 0);       //fuLoad

var hGuiFont = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var hMainWnd = AkelPad.GetMainWnd();
var nBufSize = 260;
var lpBuffer = AkelPad.MemAlloc(nBufSize * _TSIZE);
var nWndX    = 250;
var nWndY    = 80;
var aParam   = [];
var hFocus;
var hFocusEd;
var bNewParam;

GetLangStrings();
ReadWriteIni(false);

var CLASS   = 0;
var HWND    = 1;
var EXSTYLE = 2;
var STYLE   = 3;
var X       = 4;
var Y       = 5;
var W       = 6;
var H       = 7;
var TXT     = 8;

var aWnd      = [];
var IDDRV     = 1000;
var IDDRVRES  = 1001;
var IDDRVUSER = 1002;
var IDDRVLB   = 1003;
var IDMAP     = 1004;
var IDREMOVE  = 1005;
var IDBROWSE  = 1006;
var IDPARAM   = 1007;
var IDPARRES  = 1008;
var IDPARUSER = 1009;
var IDPARLB   = 1010;
var IDPARNEW  = 1011;
var IDPAREDIT = 1012;
var IDPARDEL  = 1013;
var IDWAIT    = 1014;

//0x50000000=WS_VISIBLE|WS_CHILD
//0x50000007=WS_VISIBLE|WS_CHILD|BS_GROUPBOX
//0x50010000=WS_VISIBLE|WS_CHILD|WS_TABSTOP
//0x50010001=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON
//0x50010080=WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
//0x50400001=WS_VISIBLE|WS_CHILD|WS_DLGFRAME|SS_CENTER
//0x50A10081=WS_VISIBLE|WS_CHILD|WS_VSCROLL|WS_BORDER|WS_TABSTOP|LBS_USETABSTOPS|LBS_NOTIFY
//Windows             CLASS,HWND,EXSTYLE,      STYLE,   X,   Y,   W,   H, TXT
aWnd[IDDRV    ] = ["STATIC",   0,      0, 0x50000000,  10,  10, 100,  13, sTxtDrive];
aWnd[IDDRVRES ] = ["STATIC",   0,      0, 0x50000000,  47,  10, 100,  13, sTxtResource];
aWnd[IDDRVUSER] = ["STATIC",   0,      0, 0x50000000, 330,  10, 100,  13, sTxtUser];
aWnd[IDDRVLB  ] = ["LISTBOX",  0,      0, 0x50A10081,  10,  25, 470, 200, ""];
aWnd[IDMAP    ] = ["BUTTON",   0,      0, 0x50010000, 115, 215,  80,  23, sTxtMap];
aWnd[IDREMOVE ] = ["BUTTON",   0,      0, 0x50010000, 205, 215,  80,  23, sTxtRemove];
aWnd[IDBROWSE ] = ["BUTTON",   0,      0, 0x50010000, 295, 215,  80,  23, sTxtBrowse];
aWnd[IDPARAM  ] = ["BUTTON",   0,      0, 0x50000007,  10, 250, 470, 255, sTxtParams];
aWnd[IDPARRES ] = ["STATIC",   0,      0, 0x50000000,  20, 270, 100,  13, sTxtResource];
aWnd[IDPARUSER] = ["STATIC",   0,      0, 0x50000000, 303, 270, 100,  13, sTxtUser];
aWnd[IDPARLB  ] = ["LISTBOX",  0,      0, 0x50A10081,  20, 285, 450, 200, ""];
aWnd[IDPARNEW ] = ["BUTTON",   0,      0, 0x50010000, 115, 475,  80,  23, sTxtNew];
aWnd[IDPAREDIT] = ["BUTTON",   0,      0, 0x50010000, 205, 475,  80,  23, sTxtEdit];
aWnd[IDPARDEL ] = ["BUTTON",   0,      0, 0x50010000, 295, 475,  80,  23, sTxtDelete];
aWnd[IDWAIT   ] = ["STATIC",   0,      0, 0x50400001, 130, 100, 240,  80, ""];

var aWndEd     = [];
var IDEDRES    = 1100;
var IDEDRESE   = 1101;
var IDEDUSER   = 1102;
var IDEDUSERE  = 1103;
var IDEDPASS   = 1104;
var IDEDPASSE  = 1105;
var IDEDOK     = 1106;
var IDEDCANCEL = 1107;
//Windows                CLASS,HWND,EXSTYLE,      STYLE,   X,   Y,   W,   H, TXT
aWndEd[IDEDRES   ] = ["STATIC",   0,      0, 0x50000000,  10,  10, 200,  13, sTxtResource + " (\\\\" + sTxtServer + "\\" + sTxtShare + ")"];
aWndEd[IDEDRESE  ] = ["EDIT",     0,  0x200, 0x50010080,  10,  25, 300,  20, ""];
aWndEd[IDEDUSER  ] = ["STATIC",   0,      0, 0x50000000,  10,  55, 100,  13, sTxtUser];
aWndEd[IDEDUSERE ] = ["EDIT",     0,  0x200, 0x50010080,  10,  70, 300,  20, ""];
aWndEd[IDEDPASS  ] = ["STATIC",   0,      0, 0x50000000,  10, 100, 100,  13, sTxtPassword];
aWndEd[IDEDPASSE ] = ["EDIT",     0,  0x200, 0x50010080,  10, 115, 300,  20, ""];
aWndEd[IDEDOK    ] = ["BUTTON",   0,      0, 0x50010001,  75, 145,  80,  23, sTxtOK];
aWndEd[IDEDCANCEL] = ["BUTTON",   0,      0, 0x50010000, 165, 145,  80,  23, sTxtCancel];

AkelPad.ScriptNoMutex(0x11 /*ULT_LOCKSENDMESSAGE|ULT_UNLOCKSCRIPTSQUEUE*/);
AkelPad.WindowRegisterClass(sClass);

hDlg = oSys.Call("User32::CreateWindowEx" + _TCHAR,
                 0,               //dwExStyle
                 sClass,         //lpClassName
                 sTxtCaption,     //lpWindowName
                 0x90CA0000,      //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
                 nWndX,           //x
                 nWndY,           //y
                 495,             //nWidth
                 545,             //nHeight
                 hMainWnd,        //hWndParent
                 0,               //ID
                 hInstDLL,        //hInstance
                 DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.

AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterClass(sClass);
AkelPad.MemFree(lpBuffer);
oSys.Call("User32::DestroyIcon", hIconSmall);
oSys.Call("User32::DestroyIcon", hIconBig);

function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 1) //WM_CREATE
  {
    var i;

    for (i = 1000; i < aWnd.length; ++i)
    {
      aWnd[i][HWND] =
        oSys.Call("User32::CreateWindowEx" + _TCHAR,
                  aWnd[i][EXSTYLE], //dwExStyle
                  aWnd[i][CLASS],   //lpClassName
                  aWnd[i][TXT],     //lpWindowName
                  aWnd[i][STYLE],   //dwStyle
                  aWnd[i][X],       //x
                  aWnd[i][Y],       //y
                  aWnd[i][W],       //nWidth
                  aWnd[i][H],       //nHeight
                  hWnd,             //hWndParent
                  i,                //ID
                  hInstDLL,         //hInstance
                  0);               //lpParam

      AkelPad.SendMessage(aWnd[i][HWND], 48 /*WM_SETFONT*/, hGuiFont, 1);
    }

    //Hide Wait window
    oSys.Call("User32::ShowWindow", aWnd[IDWAIT][HWND], 0);

    //Set TabStops in listboxes
    AkelPad.MemCopy(lpBuffer, 24, DT_DWORD);
    AkelPad.MemCopy(_PtrAdd(lpBuffer, 4), 212, DT_DWORD);
    AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_SETTABSTOPS, 2, lpBuffer);
    AkelPad.MemCopy(lpBuffer, 190, DT_DWORD);
    AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_SETTABSTOPS, 1, lpBuffer);

    //Fill listboxes
    FillDrivesLB();
    FillParamLB();
    AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_SETCURSEL, 0, 0);
    AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_SETCURSEL, 0, 0);

    //Check buttons
    CheckMapButtons();
    CheckParamButtons();

    AkelPad.SendMessage(hWnd, 0x0080 /*WM_SETICON*/, 0 /*ICON_SMALL*/, hIconSmall);
    AkelPad.SendMessage(hWnd, 0x0080 /*WM_SETICON*/, 1 /*ICON_BIG*/,   hIconBig);

    hFocus = aWnd[IDDRVLB][HWND];
  }

  else if ((uMsg == 6 /*WM_ACTIVATE*/) && (! wParam))
    hFocus = oSys.Call("User32::GetFocus");

  else if (uMsg == 7) //WM_SETFOCUS
    oSys.Call("User32::SetFocus", hFocus);

  else if (uMsg == 256 /*WM_KEYDOWN*/)
  {
    if ((wParam == 13 /*VK_RETURN*/) &&
        oSys.Call("User32::IsWindowEnabled", aWnd[IDMAP][HWND]) &&
        ((oSys.Call("User32::GetFocus") == aWnd[IDDRVLB][HWND]) ||
         (oSys.Call("User32::GetFocus") == aWnd[IDPARLB][HWND])))
    {
      if (! oSys.Call("User32::PeekMessage" + _TCHAR, lpBuffer, hWnd, 0, 0, 0))
        oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDMAP, 0);
    }
    else if (wParam == 0x02E /*VK_DELETE*/)
    {
      if (oSys.Call("User32::GetKeyState", 0x10 /*VK_SHIFT*/) & 0x8000)
        oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDPARDEL, 0);
      else
        oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDREMOVE, 0);
    }
    else if (wParam == 27 /*VK_ESCAPE*/)
      oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
  }

  else if (uMsg == 260) //WM_SYSKEYDOWN
  {
    if (wParam == 0x31) //1 key
      oSys.Call("User32::SetFocus", aWnd[IDDRVLB][HWND]);
    if (wParam == 0x32) //2 key
      oSys.Call("User32::SetFocus", aWnd[IDPARLB][HWND]);
  }

  else if (uMsg == 273) //WM_COMMAND
  {
    var nLowParam = LoWord(wParam);
    var nHiwParam = HiWord(wParam);

    if ((nLowParam == IDDRVLB) && (nHiwParam == LBN_SELCHANGE))
      CheckMapButtons();
    else if ((nLowParam == IDMAP) ||
        ((nLowParam == IDDRVLB) && (nHiwParam == LBN_DBLCLK)))
      MapNetDrive(hWnd);
    else if (nLowParam == IDREMOVE)
      RemoveNetDrive(hWnd);
    else if (nLowParam == IDBROWSE)
      Browse();
    else if (nLowParam == IDPARNEW)
    {
      bNewParam = 1;
      EditParamWindow();
    }
    else if ((nLowParam == IDPAREDIT) ||
             ((nLowParam == IDPARLB) && (nHiwParam == LBN_DBLCLK)))
    {
      bNewParam = 0;
      EditParamWindow();
    }
    else if (nLowParam == IDPARDEL)
      DeleteParam(hWnd);
  }

  else if (uMsg == 16) //WM_CLOSE
  {
    ReadWriteIni(true);
    oSys.Call("User32::DestroyWindow", hWnd);
  }

  else if (uMsg == 2) //WM_DESTROY
    //Exit message loop
    oSys.Call("User32::PostQuitMessage", 0);

  return 0;
}

function LoWord(nParam)
{
  return (nParam & 0xffff);
}

function HiWord(nParam)
{
  return ((nParam >> 16) & 0xffff);
}

function GetWindowPos(hWnd, oRect)
{
  var lpRect = AkelPad.MemAlloc(16) //sizeof(RECT);

  oSys.Call("User32::GetWindowRect", hWnd, lpRect);

  oRect.X = AkelPad.MemRead(_PtrAdd(lpRect,  0), DT_DWORD);
  oRect.Y = AkelPad.MemRead(_PtrAdd(lpRect,  4), DT_DWORD);
  oRect.W = AkelPad.MemRead(_PtrAdd(lpRect,  8), DT_DWORD) - oRect.X;
  oRect.H = AkelPad.MemRead(_PtrAdd(lpRect, 12), DT_DWORD) - oRect.Y;

  AkelPad.MemFree(lpRect);
}

function FillDrivesLB()
{
  var oDrives     = {};
  var lpDriveName = AkelPad.MemAlloc(3 * _TSIZE);
  var lpName      = AkelPad.MemAlloc(260 * _TSIZE); //sizeof(MAX_PATH)
  var lpNameSize  = AkelPad.MemAlloc(4);
  var nDriveType;
  var sDrive;
  var i;

  for (i = "Z".charCodeAt(0); i >= "A".charCodeAt(0); --i)
  {
    sDrive     = String.fromCharCode(i) + ":";
    nDriveType = oSys.Call("Kernel32::GetDriveType" + _TCHAR, sDrive + "\\");
    if ((nDriveType == 1 /*DRIVE_NO_ROOT_DIR*/) || (nDriveType == 4 /*DRIVE_REMOTE*/))
    {
      oDrives[sDrive] = ["", ""];

      AkelPad.MemCopy(lpDriveName, sDrive, _TSTR);
      AkelPad.MemCopy(lpName, "", _TSTR);
      AkelPad.MemCopy(lpNameSize, 260, DT_DWORD);

      if (oSys.Call("Mpr::WNetGetConnection" + _TCHAR, lpDriveName, lpName, lpNameSize) == 0) //NO_ERROR
        oDrives[sDrive][0] = AkelPad.MemRead(lpName, _TSTR);

      AkelPad.MemCopy(lpName, "", _TSTR);
      AkelPad.MemCopy(lpNameSize, 260, DT_DWORD);

      if (oSys.Call("Mpr::WNetGetUser" + _TCHAR, lpDriveName, lpName, lpNameSize) == 0) //NO_ERROR
        oDrives[sDrive][1] = AkelPad.MemRead(lpName, _TSTR);
    }
  }

  AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_RESETCONTENT, 0, 0);
  for (i in oDrives)
  {
    AkelPad.MemCopy(lpBuffer, i  + "\t" + oDrives[i][0] + "\t" + oDrives[i][1], _TSTR);
    AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_ADDSTRING, 0, lpBuffer);
  }

  AkelPad.MemFree(lpDriveName);
  AkelPad.MemFree(lpName);
  AkelPad.MemFree(lpNameSize);
}

function FillParamLB()
{
  var i;

  AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_RESETCONTENT, 0, 0);

  for (i = 0; i < aParam.length; ++i)
  {
    AkelPad.MemCopy(lpBuffer, aParam[i][0] + "\t" + aParam[i][1], _TSTR);
    AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_ADDSTRING, 0, lpBuffer);
  }
}

function CheckMapButtons()
{
  var nDrvPos = AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_GETCURSEL, 0, 0);
  var sResource;

  AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_GETTEXT, nDrvPos, lpBuffer);
  sResource = AkelPad.MemRead(lpBuffer, _TSTR).substring(3, AkelPad.MemRead(lpBuffer, _TSTR).lastIndexOf("\t"));

  oSys.Call("User32::EnableWindow", aWnd[IDMAP   ][HWND], (sResource) ? 0 : 1);
  oSys.Call("User32::EnableWindow", aWnd[IDREMOVE][HWND], (sResource) ? 1 : 0);
  oSys.Call("User32::EnableWindow", aWnd[IDBROWSE][HWND], (sResource) ? 1 : 0);

  if (! oSys.Call("User32::IsWindowEnabled", oSys.Call("User32::GetFocus")))
    oSys.Call("User32::SetFocus", aWnd[IDDRVLB][HWND]);
}

function CheckParamButtons()
{
  oSys.Call("User32::EnableWindow", aWnd[IDPAREDIT][HWND], (aParam.length) ? 1 : 0);
  oSys.Call("User32::EnableWindow", aWnd[IDPARDEL ][HWND], (aParam.length) ? 1 : 0);

  if (! oSys.Call("User32::IsWindowEnabled", oSys.Call("User32::GetFocus")))
    oSys.Call("User32::SetFocus", aWnd[IDPARLB][HWND]);
}

function MapNetDrive(hWnd)
{
  var WshNetwork = new ActiveXObject("WScript.Network");
  var nDrvPos    = AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_GETCURSEL, 0, 0);
  var nParPos    = AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_GETCURSEL, 0, 0);
  var sDrive;

  if (nParPos < 0)
  {
    AkelPad.MessageBox(hWnd, sTxtNoParams, sTxtError, 48);
    return;
  }

  oSys.Call("User32::ShowWindow", aWnd[IDWAIT][HWND], 1);
  oSys.Call("User32::SetWindowText" + _TCHAR, aWnd[IDWAIT][HWND], "\n\n" + sTxtWait);

  AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_GETTEXT, nDrvPos, lpBuffer);
  sDrive = AkelPad.MemRead(lpBuffer, _TSTR).substr(0, 2);

  try
  {
    WshNetwork.RemoveNetworkDrive(sDrive, 1 /*bForce*/, 1 /*bUpdateProfile*/);
  }
  catch (oError)
  {
  }

  try
  {
    WshNetwork.MapNetworkDrive(sDrive, aParam[nParPos][0], 1 /*bUpdateProfile*/, aParam[nParPos][1], aParam[nParPos][2]);
  }
  catch (oError)
  {
    oSys.Call("User32::ShowWindow", aWnd[IDWAIT][HWND], 0);
    AkelPad.MessageBox(hWnd,
                       oError.description + ((oError.description != oError.message) ? "\n" + oError.message : ""),
                       sTxtError, 48);
  }

  oSys.Call("User32::ShowWindow", aWnd[IDWAIT][HWND], 0);
  FillDrivesLB();
  AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_SETCURSEL, nDrvPos, 0);
  CheckMapButtons();
}

function RemoveNetDrive(hWnd)
{
  var WshNetwork = new ActiveXObject("WScript.Network");
  var nDrvPos    = AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_GETCURSEL, 0, 0);
  var sDrive;

  if (oSys.Call("User32::IsWindowEnabled", aWnd[IDREMOVE][HWND]))
  {
    AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_GETTEXT, nDrvPos, lpBuffer);
    sDrive = AkelPad.MemRead(lpBuffer, _TSTR).substr(0, 2);

    if (AkelPad.MessageBox(hWnd,
                           sTxtIsDiscon + " " + sDrive + " ?",
                           sTxtDisconnect,
                           0x21 /*MB_ICONQUESTION|MB_OKCANCEL*/) == 1 /*IDOK*/)
    {
      try
      {
        WshNetwork.RemoveNetworkDrive(sDrive, 1 /*bForce*/, 1 /*bUpdateProfile*/);
      }
      catch (oError)
      {
      }

      FillDrivesLB();
      AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_SETCURSEL, nDrvPos, 0);
      CheckMapButtons();
    }
  }
}

function Browse()
{
  var nDrvPos = AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_GETCURSEL, 0, 0);
  var sDrive;

  AkelPad.SendMessage(aWnd[IDDRVLB][HWND], LB_GETTEXT, nDrvPos, lpBuffer);
  sDrive = AkelPad.MemRead(lpBuffer, _TSTR).substr(0, 2);

  new ActiveXObject("Shell.Application").Explore(sDrive + "\\");
  //or
  //new ActiveXObject("Shell.Application").Open(sDrive + "\\");
}

function DeleteParam(hWnd)
{
  var nParPos = AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_GETCURSEL, 0, 0);

  if ((nParPos > -1) &&
      (AkelPad.MessageBox(hWnd,
                          sTxtResource + ": " + aParam[nParPos][0] + "\n" +
                          sTxtUser + ": " + aParam[nParPos][1] + "\n\n" +
                          sTxtIsDelete,
                          sTxtDelete.replace(/&/, ""),
                          0x21 /*MB_ICONQUESTION|MB_OKCANCEL*/) == 1 /*IDOK*/))
  {
    aParam.splice(nParPos, 1);
    AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_DELETESTRING, nParPos, 0);

    if (nParPos == aParam.length)
      --nParPos;

    AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_SETCURSEL, nParPos, 0);
    CheckParamButtons();
  }
}

function EditParamWindow()
{
  var oRect = {};
  var sWndName;
  var nParPos;

  GetWindowPos(hDlg, oRect);

  if (bNewParam)
  {
    sWndName = sTxtNewParam;
    aWndEd[IDEDRESE ][TXT] = "";
    aWndEd[IDEDUSERE][TXT] = "";
    aWndEd[IDEDPASSE][TXT] = "";
  }
  else
  {
    sWndName = sTxtEditParam;
    nParPos  = AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_GETCURSEL, 0, 0);
    aWndEd[IDEDRESE ][TXT] = aParam[nParPos][0];
    aWndEd[IDEDUSERE][TXT] = aParam[nParPos][1];
    aWndEd[IDEDPASSE][TXT] = aParam[nParPos][2];
  }

  oSys.Call("User32::CreateWindowEx" + _TCHAR,
            0,                 //dwExStyle
            sClass,            //lpClassName
            sWndName,          //lpWindowName
            0x90CA0000,        //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
            oRect.X + 90,      //x
            oRect.Y + 310,     //y
            325,               //nWidth
            210,               //nHeight
            hDlg,              //hWndParent
            0,                 //ID
            hInstDLL,          //hInstance
            DialogCallbackEd); //lpParam
        
  oSys.Call("User32::EnableWindow", hMainWnd, 0);
  oSys.Call("User32::EnableWindow", hDlg, 0);
}

function DialogCallbackEd(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 1) //WM_CREATE
  {
    var i;

    for (i = 1100; i < aWndEd.length; ++i)
    {
      aWndEd[i][HWND] =
        oSys.Call("User32::CreateWindowEx" + _TCHAR,
                  aWndEd[i][EXSTYLE], //dwExStyle
                  aWndEd[i][CLASS],   //lpClassName
                  aWndEd[i][TXT],     //lpWindowName
                  aWndEd[i][STYLE],   //dwStyle
                  aWndEd[i][X],       //x
                  aWndEd[i][Y],       //y
                  aWndEd[i][W],       //nWidth
                  aWndEd[i][H],       //nHeight
                  hWnd,               //hWndParent
                  i,                  //ID
                  hInstDLL,           //hInstance
                  0);                 //lpParam

      AkelPad.SendMessage(aWndEd[i][HWND], 48 /*WM_SETFONT*/, hGuiFont, 1);
    }

    AkelPad.SendMessage(aWndEd[IDEDRESE ][HWND], 197 /*EM_SETLIMITTEXT*/, 128, 0);
    AkelPad.SendMessage(aWndEd[IDEDUSERE][HWND], 197 /*EM_SETLIMITTEXT*/, 128, 0);
    AkelPad.SendMessage(aWndEd[IDEDPASSE][HWND], 197 /*EM_SETLIMITTEXT*/, 128, 0);
    AkelPad.SendMessage(aWndEd[IDEDRESE ][HWND], 177 /*EM_SETSEL*/, 0, -1);

    AkelPad.SendMessage(hWnd, 0x0080 /*WM_SETICON*/, 0 /*ICON_SMALL*/, hIconSmall);

    hFocusEd = aWndEd[IDEDRESE][HWND];
  }

  else if ((uMsg == 6 /*WM_ACTIVATE*/) && (! wParam))
    hFocusEd = oSys.Call("User32::GetFocus");

  else if (uMsg == 7) //WM_SETFOCUS
    oSys.Call("User32::SetFocus", hFocusEd);

  else if (uMsg == 256 /*WM_KEYDOWN*/)
  {
    if ((wParam == 13 /*VK_RETURN*/) &&
        (oSys.Call("User32::GetFocus") != aWndEd[IDEDOK][HWND]))
    {
      if (! oSys.Call("User32::PeekMessage" + _TCHAR, lpBuffer, hWnd, 0, 0, 0))
        oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDEDOK, 0);
    }
    else if (wParam == 27 /*VK_ESCAPE*/)
      oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
  }

  else if (uMsg == 273) //WM_COMMAND
  {
    var nLowParam = LoWord(wParam);

    if (nLowParam == IDEDOK)
    {
      if (InsertChangeParam(hWnd))
        oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
    else if (nLowParam == IDEDCANCEL)
      oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
  }

  else if (uMsg == 16) //WM_CLOSE
  {
    oSys.Call("User32::EnableWindow", hMainWnd, 1);
    oSys.Call("User32::EnableWindow", hDlg, 1);
    oSys.Call("User32::DestroyWindow", hWnd);
  }

  else
    oSys.Call("User32::DefDlgProc" + _TCHAR,
              hWnd,
              1025 /*DM_SETDEFID*/,
              oSys.Call("User32::GetDlgCtrlID", oSys.Call("User32::GetFocus")),
              0);

  return 0;
}

function InsertChangeParam(hWnd)
{
  var sResource;
  var sUser;
  var sPassword;
  var nParPos;
  var i;

  oSys.Call("User32::GetWindowText" + _TCHAR, aWndEd[IDEDRESE][HWND], lpBuffer, nBufSize);
  sResource = AkelPad.MemRead(lpBuffer, _TSTR);
  oSys.Call("User32::GetWindowText" + _TCHAR, aWndEd[IDEDUSERE][HWND], lpBuffer, nBufSize);
  sUser = AkelPad.MemRead(lpBuffer, _TSTR);
  oSys.Call("User32::GetWindowText" + _TCHAR, aWndEd[IDEDPASSE][HWND], lpBuffer, nBufSize);
  sPassword = AkelPad.MemRead(lpBuffer, _TSTR);

  if (! sResource)
  {
    AkelPad.MessageBox(hWnd, sTxtNoResource, sTxtError, 48);
    oSys.Call("User32::SetFocus", aWndEd[IDEDRESE][HWND]);
    return 0;
  }

  if (bNewParam)
    nParPos = aParam.push([]) - 1;
  else
    nParPos = AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_GETCURSEL, 0, 0);

  aParam[nParPos][0] = sResource;
  aParam[nParPos][1] = sUser;
  aParam[nParPos][2] = sPassword;

  aParam.sort(function(a, b)
    {
      if (a[0] < b[0])
        return -1;
      else if (a[0] > b[0])
        return  1;
      else if (a[1] < b[1])
        return -1;
      else if (a[1] > b[1])
        return 1;
      else
        return 0;
    });

  //Find in Param array
  for (i = 0; i < aParam.length; ++i)
  {
    if ((aParam[i][0] == sResource) && (aParam[i][1] == sUser) && (aParam[i][2] == sPassword))
    {
      nParPos = i;
      break;
    }
  }

  FillParamLB();
  AkelPad.SendMessage(aWnd[IDPARLB][HWND], LB_SETCURSEL, nParPos, 0);
  CheckParamButtons();

  return 1;
}

function ReadWriteIni(bWrite)
{
  var oRect    = {};
  var oFSO     = new ActiveXObject("Scripting.FileSystemObject");
  var sIniFile = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".ini";
  var sIniTxt;
  var oFile;
  var i;

  if (bWrite)
  {
    GetWindowPos(hDlg, oRect);

    sIniTxt = 'nWndX=' + oRect.X + ';\r\n' +
              'nWndY=' + oRect.Y + ';\r\n' +
              'aParam=[';

    for (i = 0; i < aParam.length; ++i)
      sIniTxt += '["' +
                 aParam[i][0].replace(/[\\"]/g, '\\$&') + '","' +
                 aParam[i][1].replace(/[\\"]/g, '\\$&') + '","' +
                 aParam[i][2].replace(/[\\"]/g, '\\$&') + '"]' +
                 ((i == aParam.length - 1) ? '' : ',');

    sIniTxt += '];';

    oFile = oFSO.OpenTextFile(sIniFile, 2, true, -1);
    oFile.Write(sIniTxt);
    oFile.Close();
  }

  else if (oFSO.FileExists(sIniFile))
  {
    oFile = oFSO.OpenTextFile(sIniFile, 1, false, -1);

    try
    {
      eval(oFile.ReadAll());
    }
    catch (oError)
    {
    }

    oFile.Close();
  }
}

function GetLangStrings()
{
  if ((hMainWnd && (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1045)) || ((! hMainWnd) && (oSys.Call("Kernel32::GetUserDefaultLangID") == 1045))) //Polish
  {
    sTxtCaption    = "Mapowanie dysków sieciowych";
    sTxtDrive      = "Dysk";
    sTxtResource   = "Zasób sieciowy";
    sTxtServer     = "serwer";
    sTxtShare      = "udział";
    sTxtUser       = "Użytkownik";
    sTxtPassword   = "Hasło";
    sTxtMap        = "&Mapuj";
    sTxtRemove     = "&Odłącz";
    sTxtBrowse     = "&Przeglądaj";
    sTxtParams     = "Parametry mapowania";
    sTxtNew        = "&Nowy";
    sTxtEdit       = "&Edycja";
    sTxtDelete     = "&Usuń";
    sTxtWait       = "Czekaj...";
    sTxtOK         = "OK";
    sTxtCancel     = "Anuluj";
    sTxtError      = "Błąd";
    sTxtNoParams   = "Brak zdefiniowanych parametrów mapowania.";
    sTxtDisconnect = "Odłączanie dysku sieciowego";
    sTxtIsDiscon   = "Czy chcesz odłączyć od zasobu sieciowego dysk";
    sTxtNewParam   = "Nowy parametr";
    sTxtEditParam  = "Edycja parametru";
    sTxtNoResource = "Musisz wpisać zasób sieciowy.";
    sTxtIsDelete   = "Czy chcesz usunąć ten parametr z listy?";
  }
  else
  {
    sTxtCaption    = "Mapping network drives";
    sTxtDrive      = "Drive";
    sTxtResource   = "Network resource";
    sTxtServer     = "server";
    sTxtShare      = "share";
    sTxtUser       = "User";
    sTxtPassword   = "Password";
    sTxtMap        = "&Map";
    sTxtRemove     = "&Remove";
    sTxtBrowse     = "&Browse";
    sTxtParams     = "Mapping parameters";
    sTxtNew        = "&New";
    sTxtEdit       = "&Edit";
    sTxtDelete     = "&Delete";
    sTxtWait       = "Wait...";
    sTxtOK         = "OK";
    sTxtCancel     = "Cancel";
    sTxtError      = "Error";
    sTxtNoParams   = "There are no defined mapping parameters.";
    sTxtDisconnect = "Disconnect network drive";
    sTxtIsDiscon   = "Do you want disconnect from network resource drive";
    sTxtNewParam   = "New parameter";
    sTxtEditParam  = "Edit parameter";
    sTxtNoResource = "You must type network resource.";
    sTxtIsDelete   = "Do you want delete this parameter from the list?";
  }
}

Last edited by KDJ on Fri Aug 05, 2016 9:28 pm, edited 12 times in total.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Скрипт с различными Функциями, которые можно использовать в других скриптах vbs для AkelPad

Выложить код не получается, более 1400 строк, да и не имеет смысла
Скрипт обновляется довольно часто, добавляются новые нужные функции, оптимизируются имеющиеся. Последнюю версию всегда можете найти по этой ссылке:

Скачать Functions.vbs
Last edited by Andrey_A_A on Thu Sep 13, 2012 2:53 am, edited 8 times in total.
Post Reply