***************************************************************** *** Scripts AkelPad plugin v18.6 *** ***************************************************************** 2007-2016 Шенгальц Александр aka Instructor (Shengalts@mail.ru) *** Описание *** Scripts плагин основан на технологии Windows Scripting Host (WSH), таким образом, Вы можете использовать различные Windows Component Object Model (COM) объекты. Например, Вы можете осуществить поиск по регулярным выражениям, используя RegExp объект, работать с файлами, используя FileSystemObject объект, создавать ярлыки, работать с реестром Windows, используя WshShell объект, или работать с функциями сети, используя WshNetwork объект. Также Вы можете создавать и запускать скрипты, которые взаимодействуют с внешними приложениями, поддерживающими Automation (такими как Word и Excel). Код плагина основан на "COM in C" от Jeff Glatt. *** Включённые скрипты *** SearchReplace.js -поиск/замена с использованием регулярных выражений. SpellCheck.js -проверка орфографии, используя Microsoft Word. LinesFilter.js -фильтр строк. Calculator.js -текстовый калькулятор. EvalCmd.js -обработать выражение, переданное через командную строку. InsertDate.js -вставка даты и времени в указанном формате. InsertFile.js -вставка содержимого указанного файла. RenameFile.js -переименование редактируемого файла. Keyboard.js -исправляет раскладку клавиатуры или транслитерирует текст. ColumnCounter.js -увеличение чисел (счетчик) вертикального выделения. Test.js -тестовый скрипт на JScript. Test.vbs -тестовый скрипт на VBScript. *** Функции *** Scripts::Main Основной диалог. *** Внешний вызов *** Call("Scripts::Main", 1, "SCRIPT", "ARGUMENTS") Параметры: 1 Выполнить скрипт. "SCRIPT" Имя файла скрипта. Если "", то используется последний обработанный скрипт. "ARGUMENTS" Аргументы (по умолчанию ""). Примеры: Call("Scripts::Main", 1, "InsertDate.js") Call("Scripts::Main", 1, "InsertDate.js", `"dd MMMM yyyy"`) Call("Scripts::Main", 2, "SCRIPT", "ARGUMENTS") То же, что и 1, но ожидать завершения скрипта. Call("Scripts::Main", 3, "SCRIPT") Параметры: 3 Открыть скрипт на редактирование. "SCRIPT" Имя файла скрипта. Если "", то используется последний обработанный скрипт. Call("Scripts::Main", 4, "SCRIPT", "ARGUMENTS") То же, что и 2, но выполнить скрипт в главном потоке, а не создавать новый. Не рекомендуется использовать для скриптов содержащих AkelPad.WindowGetMessage(). Call("Scripts::Main", 5, "SCRIPT", OPERATION, *RESULT) Параметры: 5 Взаимодействие с работающими скриптами. "SCRIPT" Имя файла скрипта. Если "", то используется последний обработанный скрипт. OPERATION См. описание аргумента nOperation в методе AkelPad.ScriptHandle. Кроме флага SH_FINDSCRIPT. *RESULT Зависит от операции. Пример (получить дескриптор скрипта): WScript.Echo(ScriptGetHandle("SearchReplace.js")); function ScriptGetHandle(pScript) { var oSys=AkelPad.SystemFunction(); var nHandle=0; if (lpResult=AkelPad.MemAlloc(_X64?8:4 /*sizeof(INT_PTR)*/)) { AkelPad.Call("Scripts::Main", 5, pScript, 2 /*SH_THISSCRIPT*/, lpResult); nHandle=AkelPad.MemRead(lpResult, 2 /*DT_QWORD*/); AkelPad.MemFree(lpResult); } return nHandle; } Пример (получить файл скрипта): WScript.Echo(ScriptGetFile("SearchReplace.js")); function ScriptGetFile(pScript) { var oSys=AkelPad.SystemFunction(); var lpFile; var pFile=""; if (lpResult=AkelPad.MemAlloc(_X64?8:4 /*sizeof(INT_PTR)*/)) { AkelPad.Call("Scripts::Main", 5, pScript, 22 /*SH_GETFILE*/, lpResult); lpFile=AkelPad.MemRead(lpResult, 2 /*DT_QWORD*/); pFile=AkelPad.MemRead(lpFile, 1 /*DT_UNICODE*/); oSys.Call("oleaut32::SysFreeString", lpFile); AkelPad.MemFree(lpResult); } return pFile; } Call("Scripts::Main", 6, SCRIPTHANDLE, OPERATION, *RESULT) То же, что и 5, но используется дескриптор скрипта вместо файла скрипта. Call("Scripts::Main", 7, "METHOD", *RESULT) Параметры: 7 Вызвать метод Scripts плагина напрямую. Предназначено для ContextMenu, Hotkeys, Toolbar плагинов. "METHOD" Метод Scripts плагина с аргументами. *RESULT Результат вызова. Пример: "Найти следующий параграф" Call("Scripts::Main", 7, `AkelPad.TextFind(0, "(?<=\n\n)(?!\n)", 0x80001 /*FRF_DOWN|FRF_REGEXP*/)`) *** Служебная информация в скрипте *** В начале скрипта в комментариях возможно указывать служебную информацию, которая выводится в списке скриптов (необходимо включить соответствующие колонки правым кликом мыши по шапке списка), а также используется AkelUpdater'ом при обновлении. Сайт: // http://akelpad.sourceforge.net/... Версия: // Version: ... Автор: // Author: ... Описание (вариант 1): //// Search and replace using regular expressions. Описание (вариант 2): // *** Search and replace using regular expressions. *** Описание на указанном языке (вариант 3): // Description(1033): Search and replace using regular expressions. // Description(1049): Поиск/замена с использованием регулярных выражений. Список идентификаторов языка (Locale IDs Assigned by Microsoft): http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx *** Список методов (методы, не привязанные к окну AkelPad'а, отмечены как +ActiveX) *** AkelPad.GetMainWnd AkelPad.GetAkelDir AkelPad.GetInstanceExe AkelPad.GetInstanceDll +ActiveX AkelPad.GetLangId AkelPad.IsOldWindows +ActiveX AkelPad.IsAkelEdit AkelPad.IsMDI AkelPad.GetEditWnd AkelPad.SetEditWnd AkelPad.GetEditDoc AkelPad.GetEditFile AkelPad.GetFilePath +ActiveX AkelPad.GetEditCodePage AkelPad.GetEditBOM AkelPad.GetEditNewLine AkelPad.GetEditModified AkelPad.GetEditReadOnly AkelPad.SetFrameInfo AkelPad.SendMessage +ActiveX AkelPad.MessageBox +ActiveX AkelPad.InputBox +ActiveX AkelPad.GetSelStart AkelPad.GetSelEnd AkelPad.SetSel AkelPad.GetSelText AkelPad.GetTextRange AkelPad.ReplaceSel AkelPad.TextFind AkelPad.TextReplace AkelPad.GetClipboardText +ActiveX AkelPad.SetClipboardText +ActiveX AkelPad.IsPluginRunning AkelPad.Call AkelPad.CallA AkelPad.CallW AkelPad.CallEx AkelPad.CallExA AkelPad.CallExW AkelPad.Exec +ActiveX AkelPad.Command AkelPad.Font AkelPad.Recode AkelPad.Include AkelPad.IsInclude AkelPad.OpenFile AkelPad.ReadFile AkelPad.WriteFile AkelPad.SaveFile AkelPad.SystemFunction +ActiveX AkelPad.SystemFunction().AddParameter +ActiveX AkelPad.SystemFunction().Call +ActiveX AkelPad.SystemFunction().GetLastError +ActiveX AkelPad.SystemFunction().RegisterCallback +ActiveX AkelPad.SystemFunction().UnregisterCallback +ActiveX AkelPad.MemAlloc +ActiveX AkelPad.MemCopy +ActiveX AkelPad.MemRead +ActiveX AkelPad.MemStrPtr +ActiveX AkelPad.MemPtrStr +ActiveX AkelPad.MemFree +ActiveX AkelPad.DebugJIT +ActiveX AkelPad.Debug +ActiveX AkelPad.VarType +ActiveX AkelPad.VarDispatch +ActiveX AkelPad.GetArgLine AkelPad.GetArgValue AkelPad.ScriptSettings AkelPad.ScriptSettings().Begin AkelPad.ScriptSettings().Read AkelPad.ScriptSettings().Write AkelPad.ScriptSettings().Delete AkelPad.ScriptSettings().End AkelPad.WindowRegisterClass +ActiveX AkelPad.WindowUnregisterClass +ActiveX AkelPad.WindowRegisterDialog +ActiveX AkelPad.WindowUnregisterDialog +ActiveX AkelPad.CreateDialog +ActiveX AkelPad.WindowGetMessage +ActiveX AkelPad.WindowSubClass +ActiveX AkelPad.WindowNextProc +ActiveX AkelPad.WindowNoNextProc +ActiveX AkelPad.WindowUnsubClass +ActiveX AkelPad.ThreadHook +ActiveX AkelPad.ThreadUnhook +ActiveX AkelPad.ScriptNoMutex AkelPad.ScriptExitCode AkelPad.ScriptHandle +ActiveX AkelPad.ConnectObject +ActiveX AkelPad.DisconnectObject +ActiveX AkelPad.ActiveXThis +ActiveX WScript.ScriptBaseName _TCHAR +ActiveX используется как AkelPad.Constants._TCHAR vbTCHAR +ActiveX используется как AkelPad.Constants.vbTCHAR _TSTR +ActiveX используется как AkelPad.Constants._TSTR vbTSTR +ActiveX используется как AkelPad.Constants.vbTSTR _TSIZE +ActiveX используется как AkelPad.Constants._TSIZE vbTSIZE +ActiveX используется как AkelPad.Constants.vbTSIZE _X64 +ActiveX используется как AkelPad.Constants._X64 vbX64 +ActiveX используется как AkelPad.Constants.vbX64 _PtrAdd +ActiveX используется как AkelPad.Global._PtrAdd vbPtrAdd +ActiveX используется как AkelPad.Global.vbPtrAdd _PtrMath +ActiveX используется как AkelPad.Global._PtrMath vbPtrMath +ActiveX используется как AkelPad.Global.vbPtrMath *** Описание методов *** AkelPad.GetMainWnd __________________ Определить дескриптор главного окна. GetMainWnd(); Возвращаемое значение Число. Дескриптор главного окна. Пример: var hMainWnd=AkelPad.GetMainWnd(); AkelPad.GetAkelDir __________________ Определить директорию AkelPad'а или его подпапку. GetAkelDir([nSubDir]); Аргументы nSubDir 0 //ADTYPE_ROOT корневая папка AkelPad'а (по умолчанию). 1 //ADTYPE_AKELFILES "[AkelPad]\AkelFiles". 2 //ADTYPE_DOCS "[AkelPad]\AkelFiles\Docs". 3 //ADTYPE_LANGS "[AkelPad]\AkelFiles\Langs". 4 //ADTYPE_PLUGS "[AkelPad]\AkelFiles\Plugs". 5 //ADTYPE_SCRIPTS "[AkelPad]\AkelFiles\Plugs\Scripts". 6 //ADTYPE_INCLUDE "[AkelPad]\AkelFiles\Plugs\Scripts\Include". Возвращаемое значение Строка. Директория AkelPad'а или его подпапка. Пример: var pAkelDir=AkelPad.GetAkelDir(); AkelPad.GetInstanceExe ______________________ Определить дескриптор программы (EXE). GetInstanceExe(); Возвращаемое значение Число. Дескриптор программы (EXE). Пример: var hInstance=AkelPad.GetInstanceExe(); AkelPad.GetInstanceDll (+ActiveX) _________________________________ Определить дескриптор библиотеки (DLL). GetInstanceDll(); Возвращаемое значение Число. Дескриптор библиотеки (DLL). Пример: var hInstance=AkelPad.GetInstanceDll(); AkelPad.GetLangId _________________ Определить идентификатор языка программы. GetLangId([nType]); Аргументы nType 0 //LANGID_FULL полный идентификатор языка. Данное значение является комбинацией первичного языкового идентификатора и вторичного (по умолчанию). 1 //LANGID_PRIMARY первичный языковой идентификатор. 2 //LANGID_SUB вторичный языковой идентификатор. Возвращаемое значение Номер. Идентификатор языка программы. Пример: var nLangID=AkelPad.GetLangId(1 /*LANGID_PRIMARY*/); if (nLangID == 0x19) //LANG_RUSSIAN WScript.Echo("Русский"); else WScript.Echo("Другой"); AkelPad.IsOldWindows (+ActiveX) _______________________________ Проверить поддержку юникода в Windows. IsOldWindows(); Возвращаемое значение true юникод не поддерживается (Windows 95/98/Me). false юникод поддерживается (Windows NT/2000/XP). Пример: var bOldWindows=AkelPad.IsOldWindows(); AkelPad.IsAkelEdit __________________ Проверить использование AkelEdit'а в программе, либо для указанного окна. IsAkelEdit([hWnd]); Аргументы hWnd Дескриптор окна редактирования. Если ноль либо не указан, то возвращается использование AkelEdit'а в программе. Возвращаемое значение 0 //ISAEW_NONE используется контрол RichEdit (AkelPad v3.x.x). 1 //ISAEW_PROGRAM используется контрол AkelEdit (AkelPad v4.x.x или выше) // или, если указан дескриптор, то данный дескриптор является AkelEdit окном программы. 2 //ISAEW_PLUGIN если указан дескриптор, то данный дескриптор является AkelEdit окном плагина. Пример: var nAkelEdit=AkelPad.IsAkelEdit(); AkelPad.IsMDI _____________ Проверить использование многооконного режима (MDI). IsMDI(); Возвращаемое значение 0 //WMD_SDI Одноконный режим (SDI). 1 //WMD_MDI Многооконный режим (MDI). 2 //WMD_PMDI Псевдо-многооконный режим (PMDI). Пример: var nMDI=AkelPad.IsMDI(); AkelPad.GetEditWnd __________________ Определить дескриптор активного окна редактирования. GetEditWnd(); Возвращаемое значение Число. Дескриптор активного окна редактирования. Пример: var hWndEdit=AkelPad.GetEditWnd(); AkelPad.SetEditWnd __________________ Установить дескриптор активного окна редактирования вручную. После установки методы GetEditWnd, GetEditDoc, GetSelStart, GetSelEnd, SetSel, GetSelText, GetTextRange, ReplaceSel будут использовать данный дескриптор. SetEditWnd(hHandle); Аргументы hHandle Дескриптор окна редактирования или следующее значение: 1 //SEW_FOCUS Использовать дескриптор окна, которое имеет фокус. Если ноль, либо hHandle не является окном редактирования AkelEdit/RichEdit20, то управление дескрипторами передается программе и возвращается ноль. Возвращаемое значение Число. Дескриптор активного окна редактирования. Пример: var hWndOutput; if (hWndOutput=GetOutputWindow()) { if (AkelPad.SetEditWnd(hWndOutput)) AkelPad.SetSel(0, -1); } function GetOutputWindow() { var lpWnd; var hWnd=0; if (lpWnd=AkelPad.MemAlloc(_X64?8:4 /*sizeof(HWND)*/)) { AkelPad.Call("Log::Output", 2, lpWnd); hWnd=AkelPad.MemRead(lpWnd, 2 /*DT_QWORD*/); AkelPad.MemFree(lpWnd); } return hWnd; } AkelPad.GetEditDoc __________________ Определить дескриптор активного документа. GetEditDoc(); Возвращаемое значение Число. Дескриптор активного документа. Пример: var hDocEdit=AkelPad.GetEditDoc(); AkelPad.GetEditFile ___________________ Определить имя файла. GetEditFile(hHandle); Аргументы hHandle Дескриптор окна редактирования. Если ноль, то используется дескриптор активного окна редактирования. Возвращаемое значение Строка. Имя файла. Пример: var pEditFile=AkelPad.GetEditFile(0); AkelPad.GetFilePath (+ActiveX) ______________________________ Получить часть пути файла. GetFilePath(pFile, nPart); Аргументы pFile Путь файла. nPart 1 //CPF_DIR Директория. 2 //CPF_FILENAME Имя файла. 3 //CPF_FILEBASENAME Имя файла без расширения. 4 //CPF_FILEEXT Расширение файла. Возвращаемое значение Строка. Часть пути файла. Пример: var pFileName=AkelPad.GetFilePath("c:\\WINDOWS\\notepad.exe", 2 /*CPF_FILENAME*/); AkelPad.GetEditCodePage _______________________ Определить кодировку файла. GetEditCodePage(hHandle); Аргументы hHandle Дескриптор окна редактирования. Если ноль, то используется дескриптор активного окна редактирования. Возвращаемое значение Число. Кодировка. Пример: var nCodePage=AkelPad.GetEditCodePage(0); AkelPad.GetEditBOM __________________ Определить наличие сигнатуры BOM у файла. GetEditBOM(hHandle); Аргументы hHandle Дескриптор окна редактирования. Если ноль, то используется дескриптор активного окна редактирования. Возвращаемое значение true файл имеет сигнатуру BOM. false файл не имеет сигнатуры BOM. Пример: var bBOM=AkelPad.GetEditBOM(0); AkelPad.GetEditNewLine ______________________ Определить формат новой строки файла. GetEditNewLine(hHandle); Аргументы hHandle Дескриптор окна редактирования. Если ноль, то используется дескриптор активного окна редактирования. Возвращаемое значение 1 DOS/Windows (0Dh, 0Ah) 2 Unix (0Ah) 3 Mac (0Dh) Пример: var nNewLine=AkelPad.GetEditNewLine(0); AkelPad.GetEditModified _______________________ Определить статус изменения файла. GetEditModified(hHandle); Аргументы hHandle Дескриптор окна редактирования. Если ноль, то используется дескриптор активного окна редактирования. Возвращаемое значение true содержание окна редактирования было изменено. false содержание окна редактирования не было изменено. Пример: var bModified=AkelPad.GetEditModified(0); AkelPad.GetEditReadOnly _______________________ Определить использование режима только чтение. GetEditReadOnly(hHandle); Аргументы hHandle Дескриптор окна редактирования. Если ноль, то используется дескриптор активного окна редактирования. Возвращаемое значение true используется режим только чтение. false режим только чтение не используется. Пример: var bReadOnly=AkelPad.GetEditReadOnly(0); AkelPad.SetFrameInfo ____________________ Установить настройки вкладки. SetFrameInfo(lpFrame, nType, dwData); Аргументы lpFrame Дескриптор данных вкладки. Если ноль, то используется дескриптор данных активной вкладки. nType Тип настройки для изменения. См. описание флагов FIS_* в AkelDLL.h. dwData Данные для установки. Возвращаемое значение true настройка была изменена. false настройка не изменилась. Замечания Метод работает для всех оконных режимов SDI/MDI/PMDI. Пример: AkelPad.SetFrameInfo(0, 1 /*FIS_TABSTOPSIZE*/, 4); AkelPad.SendMessage (+ActiveX) ______________________________ Послать сообщение. SendMessage(hHandle, nMessage, wParam, lParam); Аргументы hHandle Дескриптор окна, чья процедура получит сообщение. nMessage Сообщение, которое посылается. wParam Дополнительная информация. lParam Дополнительная информация. Возвращаемое значение Число. Зависит от посылаемого сообщения. Пример: var hMainWnd=AkelPad.GetMainWnd(); AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4101 /*IDM_FILE_NEW*/, 0); AkelPad.MessageBox (+ActiveX) _____________________________ Показать сообщение. MessageBox(hHandle, pText, pCaption, nType[, hIcon][, ...]); Аргументы hHandle Дескриптор окна владельца. Если ноль, окно сообщения не имеет владельца. pText Текст сообщения. pCaption Заголовок окна. nType Тип сообщения. См. MSDN. hIcon Дескриптор иконки. Если ноль, используется тип иконки указанный в nType. ... Перечисление кнопок диалога. Каждая кнопка состоит из трех элементов - nButtonID, pButtonStr, nFlags. nButtonID Идентификатор кнопки. pButtonStr Текст кнопки. nFlags 0x1 //BMB_DEFAULT Кнопка по умолчанию. 0x2 //BMB_DISABLED Кнопка отключена. Замечания Если используются только первые 4 аргумента, то вызывается системный диалог сообщения. Если задействуются все аргументы, то вызывается расширенный диалог сообщения AkelPad'а. Если задействуются все аргументы, то nType обозначает только тип иконки MB_ICON*. Возвращаемое значение Число. Идентификатор нажатой кнопки. Пример (стандартный диалог): var hMainWnd=AkelPad.GetMainWnd(); AkelPad.MessageBox(hMainWnd, "MyText", "MyCaption", 64 /*MB_ICONINFORMATION*/); Пример (расширенный диалог): var hMainWnd=AkelPad.GetMainWnd(); var nChoice=AkelPad.MessageBox(hMainWnd, "MyText", "MyCaption", 32 /*MB_ICONQUESTION*/, 0, 1 /*IDOK*/, "&OK", 0x1 /*BMB_DEFAULT*/, 2 /*IDCANCEL*/, "&Cancel", 0); WScript.Echo("Button ID=" + nChoice); AkelPad.InputBox (+ActiveX) ___________________________ Диалог ввода строки. InputBox(hHandle, pCaption, pLabel, pEdit); Аргументы hHandle Дескриптор окна владельца. pCaption Заголовок окна. pLabel Заголовок поля ввода. Возможно использование символа \n для создания многострочного заголовка. pEdit Начальный текст поля ввода. Возвращаемое значение Строка. Текст поля ввода. При отмене возвращается undefined. Пример: var hMainWnd=AkelPad.GetMainWnd(); var pText=AkelPad.InputBox(hMainWnd, "MyCaption", "MyLabel", "MyText"); AkelPad.GetSelStart ___________________ Определить начало выделения. GetSelStart(); Возвращаемое значение Число. Позиция начала выделения. Пример: var nSelStart=AkelPad.GetSelStart(); AkelPad.GetSelEnd _________________ Определить конец выделения. GetSelEnd(); Возвращаемое значение Число. Позиция конца выделения. Пример: var nSelEnd=AkelPad.GetSelEnd(); AkelPad.SetSel ______________ Установить выделение. SetSel(nSelStart, nSelEnd[, nFlags]); Аргументы nSelStart Позиция начала выделения. nSelEnd Позиция конца выделения. Если -1, использовать позицию конца документа. nFlags 0x001 //AESELT_COLUMNON Включить вертикальное выделение. 0x002 //AESELT_COLUMNASIS Оставить вертикальное выделение как есть. 0x004 //AESELT_LOCKNOTIFY Не посылать оповещения AEN_SELCHANGING и AEN_SELCHANGED. 0x008 //AESELT_LOCKSCROLL Не прокручивать окно редактирования. 0x010 //AESELT_LOCKUPDATE Не обновлять окно редактирования. 0x020 //AESELT_LOCKCARET Не перемещать каретку. 0x080 //AESELT_NOCARETHORZINDENT Не менять горизонтальный отступ каретки. 0x100 //AESELT_NOVERTSCROLLCORRECT При некоторых условиях прокрутка может увеличиваться на величину одной строки. Возвращаемое значение Ноль. Пример: AkelPad.SetSel(0, 10); AkelPad.GetSelText __________________ Получить выделенный текст. GetSelText([nNewLine]); Аргументы nNewLine (только для AkelPad 4.x.x) 0 //Формат новой строки без изменения. 1 //"\r" формат новой строки (по умолчанию). 2 //"\n" формат новой строки. 3 //"\r\n" формат новой строки. Возвращаемое значение Строка. Выделенный текст. Пример: var pSelText=AkelPad.GetSelText(); AkelPad.GetTextRange ____________________ Получить текст из заданного диапазона. GetTextRange(nRangeStart, nRangeEnd[, nNewLine]); Аргументы nRangeStart Позиция начала диапазона. nRangeEnd Позиция конца диапазона. Если -1, использовать позицию конца документа. nNewLine (только для AkelPad 4.x.x) 0 //Формат новой строки без изменения. 1 //"\r" формат новой строки (по умолчанию). 2 //"\n" формат новой строки. 3 //"\r\n" формат новой строки. Возвращаемое значение Строка. Текст из диапазона. Пример: var pTextRange=AkelPad.GetTextRange(0, 10); AkelPad.ReplaceSel __________________ Заменить выделение. ReplaceSel(pText[, nSelect]); Аргументы pText Текст, которым заменяется выделение. nSelect 0 //RST_NONE не выделять вставленный текст (по умолчанию). -1 //RST_SELECT выделить вставленный текст. -2 //RST_SELECTRESTORESCROLL выделить вставленный текст и восстановить позицию прокрутки. Возвращаемое значение Ноль. Пример: AkelPad.ReplaceSel("MyText"); AkelPad.TextFind ________________ Найти текст. TextFind(hHandle, pFindIt, nFlags); Аргументы hHandle Дескриптор окна редактирования. Если ноль, то используется дескриптор активного окна редактирования. pFindIt Текст для поиска. nFlags 0x00000001 //FRF_DOWN Найти вниз. 0x00000002 //FRF_WHOLEWORD Найти слово целиком. 0x00000004 //FRF_MATCHCASE Поиск чувствителен к регистру. 0x00040000 //FRF_REGEXPNONEWLINEDOT Символ . в регулярных выражениях обозначает любой символ, кроме новой строки (использование: FRF_REGEXP|FRF_REGEXPNONEWLINEDOT). 0x00080000 //FRF_REGEXP Поиск с регулярными выражениями. 0x00100000 //FRF_UP Найти вверх. 0x00200000 //FRF_BEGINNING Поиск с начала (использование: FRF_DOWN|FRF_BEGINNING). 0x00400000 //FRF_SELECTION Поиск в выделении (использование: FRF_DOWN|FRF_SELECTION). 0x00800000 //FRF_ESCAPESEQ Поиск с esc-последовательностями. 0x01000000 //FRF_ALLFILES Поиск во всех открытых вкладках (использование: FRF_DOWN|FRF_ALLFILES или FRF_DOWN|FRF_BEGINNING|FRF_ALLFILES). 0x08000000 //FRF_CYCLESEARCH Поиск по кругу. 0x10000000 //FRF_CYCLESEARCHPROMPT Запрос при поиске по кругу. 0x80000000 //FRF_TEST Только протестировать. Без выделения текста. Возвращаемое значение Число. Позиция найденного текста. Если ничего не найдено, возвращаемое значение -1. Если синтаксическая ошибка в регулярном выражении (с флагом FRF_REGEXP), возвращаемое значение (-100 - СмещениеШаблона). Например, pFindIt равен "ab[c", синтаксическая ошибка в третьем символе, возвращаемое значение -102. Пример: AkelPad.TextFind(0, "МойТекстДляПоиска", 0x00200001 /*FRF_DOWN|FRF_BEGINNING*/); AkelPad.TextReplace ___________________ Найти и заменить текст. TextReplace(hHandle, pFindIt, pReplaceWith, nFindFlags, nReplaceFlags); Аргументы hHandle Дескриптор окна редактирования. Если ноль, то используется дескриптор активного окна редактирования. pFindIt Текст для поиска. pReplaceWith Текст для замены. nFindFlags 0x00000001 //FRF_DOWN Найти вниз. 0x00000002 //FRF_WHOLEWORD Найти слово целиком. 0x00000004 //FRF_MATCHCASE Поиск чувствителен к регистру. 0x00040000 //FRF_REGEXPNONEWLINEDOT Символ . в регулярных выражениях обозначает любой символ, кроме новой строки (использование: FRF_REGEXP|FRF_REGEXPNONEWLINEDOT). 0x00080000 //FRF_REGEXP Поиск с регулярными выражениями. 0x00100000 //FRF_UP Найти вверх. 0x00200000 //FRF_BEGINNING Поиск с начала (использование: FRF_DOWN|FRF_BEGINNING). 0x00400000 //FRF_SELECTION Поиск в выделении (использование: FRF_DOWN|FRF_SELECTION). 0x00800000 //FRF_ESCAPESEQ Поиск с esc-последовательностями. 0x01000000 //FRF_ALLFILES Поиск во всех открытых вкладках (использование: FRF_DOWN|FRF_ALLFILES или FRF_DOWN|FRF_BEGINNING|FRF_ALLFILES). 0x08000000 //FRF_CYCLESEARCH Поиск по кругу (не использовать с RRF_ALL). 0x10000000 //FRF_CYCLESEARCHPROMPT Запрос при поиске по кругу. 0x80000000 //FRF_TEST Только протестировать. Без замены и выделения текста. nReplaceFlags 0x1 //RRF_ALL Заменить всё. По умолчанию одна замена. Возвращаемое значение Число. Позиция найденного текста. Если ничего не найдено, возвращаемое значение -1. Если указан флаг RRF_ALL, возвращается количество замен. Если синтаксическая ошибка в регулярном выражении (с флагом FRF_REGEXP), возвращаемое значение (-100 - СмещениеШаблона). Например, pFindIt равен "ab[c", синтаксическая ошибка в третьем символе, возвращаемое значение -102. Пример: AkelPad.TextReplace(0, "МойТекстДляПоиска", "МойТекстДляЗамены", 0x00200001 /*FRF_DOWN|FRF_BEGINNING*/, 0x1 /*RRF_ALL*/); AkelPad.GetClipboardText (+ActiveX) ___________________________________ Получить текст из буфера обмена. GetClipboardText([bAnsi]); Аргументы bAnsi true Получить однобайтовый текст - ansi. false Получить двухбайтовый текст - unicode (по умолчанию). Возвращаемое значение Строка. Текст из буфера обмена. Пример: var pClipboardText=AkelPad.GetClipboardText(); AkelPad.SetClipboardText (+ActiveX) ___________________________________ Установить текст в буфер обмена. SetClipboardText(pText); Аргументы pText Текст для установки. Возвращаемое значение Ноль. Пример: AkelPad.SetClipboardText("MyText"); AkelPad.IsPluginRunning _______________________ Определяет работает плагин AkelPad'а или нет. IsPluginRunning(pFunction); Аргументы pFunction Функция для проверки. Возвращаемое значение true плагин работает. false плагин не работает. Пример: var bRunning=AkelPad.IsPluginRunning("Coder::HighLight"); AkelPad.Call ____________ Вызвать плагин AkelPad'а. Call(pFunction[, ...]); Аргументы pFunction Функция для вызова. ... Параметры функции. Замечания При вызове плагина тип строки определяется автоматически. Возвращаемое значение Если был вызван скрипт, возвращается результат AkelPad.ScriptExitCode. -1 //UD_FAILED Ошибка. 0 //UD_UNLOAD Плагин выгружен. 0x1 //UD_NONUNLOAD_ACTIVE Плагин в памяти и активен. 0x2 //UD_NONUNLOAD_NONACTIVE Плагин в памяти, но не активен. 0x4 //UD_NONUNLOAD_UNCHANGE Плагин в памяти. 0x8 //UD_HOTKEY_DODEFAULT Обработка горячей клавиши будет продолжена. Пример: var nResult=AkelPad.Call("Coder::HighLight", 2, "#000000", "#9BFF9B"); AkelPad.CallA _____________ Тоже, что и AkelPad.Call, но форсируется использование Ansi строк при вызове плагина. AkelPad.CallW _____________ Тоже, что и AkelPad.Call, но форсируется использование Unicode строк при вызове плагина. AkelPad.CallEx ______________ Вызвать плагин AkelPad'а с флагами. CallEx(nFlags, pFunction[, ...]); Аргументы nFlags 0x04 //DLLCF_SWITCHAUTOLOAD Если функция работает после вызова, то включается автозагрузка функции, если нет, то отключается автозагрузка функции. 0x08 //DLLCF_SAVENOW Используется совместно с DLLCF_SWITCHAUTOLOAD. Вызывает AKD_DLLSAVE с DLLSF_NOW после изменения флага автозагрузки. 0x10 //DLLCF_SAVEONEXIT Используется совместно с DLLCF_SWITCHAUTOLOAD. Вызывает AKD_DLLSAVE с DLLSF_ONEXIT после изменения флага автозагрузки. pFunction Функция для вызова. ... Параметры функции. Замечания При вызове плагина тип строки определяется автоматически. Возвращаемое значение Если был вызван скрипт, возвращается результат AkelPad.ScriptExitCode. -1 //UD_FAILED Ошибка. 0 //UD_UNLOAD Плагин выгружен. 0x1 //UD_NONUNLOAD_ACTIVE Плагин в памяти и активен. 0x2 //UD_NONUNLOAD_NONACTIVE Плагин в памяти, но не активен. 0x4 //UD_NONUNLOAD_UNCHANGE Плагин в памяти. 0x8 //UD_HOTKEY_DODEFAULT Обработка горячей клавиши будет продолжена. Пример: var nResult=AkelPad.CallEx(0x14 /*DLLCF_SWITCHAUTOLOAD|DLLCF_SAVEONEXIT*/, "Coder::HighLight"); AkelPad.CallExA _______________ Тоже, что и AkelPad.CallEx, но форсируется использование Ansi строк при вызове плагина. AkelPad.CallExW _______________ Тоже, что и AkelPad.CallEx, но форсируется использование Unicode строк при вызове плагина. AkelPad.Exec (+ActiveX) _______________________ Запустить программу. Exec(pCommandLine[, pWorkDirectory][, nWait][, nWindowStyle]); Аргументы pCommandLine Командная строка. Может содержать %a - директория AkelPad'а, а также переменные окружения, например, %WinDir% - директория Windows. pWorkDirectory Рабочая директория. По умолчанию "". Может содержать %a - директория AkelPad'а, а также переменные окружения, например, %WinDir% - директория Windows. nWait 0 не ожидать завершения программы, автоматически присвоив возвращаемое значение нулю (по умолчанию). 1 ожидать завершения программы и вернуть код выхода, указанный программой. 2 ожидать до тех пор, пока процесс не начнет ожидать ввода от пользователя, и автоматически присвоить возвращаемое значение нулю. nWindowStyle -1 не менять (по умолчанию). 0 скрытое окно. 1 окно как есть. 2 свернутое окно. 3 развернутое окно. 6 свернутое, не активное окно. 9 не развернутое окно. Замечание: программы могут игнорировать данный параметр. Возвращаемое значение Число. Код выхода. Пример: AkelPad.Exec("notepad.exe"); AkelPad.Command _______________ Вызвать внутреннюю команду AkelPad'а. Command(nCmd[, nParam]); Аргументы nCmd Номер внутренней команды. nParam Параметр передаваемый внутренней команде. Только некоторые команды поддерживают дополнительный параметр, например, 4113 /*IDM_FILE_SILENTPRINT*/. См. описание команд в AkelDLL.h. Возвращаемое значение Число. Зависит от вызываемой команды. Пример: AkelPad.Command(4101 /*IDM_FILE_NEW*/); AkelPad.Font ____________ Установить шрифт. Font(pFont, nStyle, nSize); Аргументы pFont Имя шрифта, например, "Courier". Не изменяется, если "". nStyle 0 игнорировать. 1 обычный шрифт. 2 жирный шрифт. 3 курсивный шрифт. 4 жирный курсивный шрифт. nSize Размер шрифта. Не изменяется, если 0. Возвращаемое значение Ноль. Пример: AkelPad.Font("Courier", 4, 10) AkelPad.Recode ______________ Перекодировать выделение. Recode(nCodePageFrom, nCodePageTo); Аргументы nCodePageFrom Кодировка источник. Если -1, она будет определена автоматически. nCodePageTo Кодировка приемник. Если -1, она будет определена автоматически. Возвращаемое значение Ноль. Пример: AkelPad.Recode(1251, 866); AkelPad.Include _______________ Добавить код из файла. Include(pFileName[, nFlags][, nCodePage][, bBOM]); Аргументы pFileName Имя файла, который находится в директории "[AkelPad]\AkelFiles\Plugs\Scripts\Include". nFlags См. описание nFlags метода AkelPad.ReadFile. nCodePage См. описание nCodePage метода AkelPad.ReadFile. bBOM См. описание bBOM метода AkelPad.ReadFile. Замечания Метод Include аналогичен коду eval(AkelPad.ReadFile("...")), но позволяет выявлять место ошибки в добавляемом файле, если она присутствует. Возвращаемое значение true успешно. false не успешно. Пример: var lpItems; var nItem; if (!AkelPad.Include("ShowMenu.js")) WScript.Quit(); lpItems=[["ItemA", MF_NORMAL, 101], ["ItemB", MF_SUBMENU], ["ItemB-1", MF_NORMAL, 102], ["ItemB-2", MF_NORMAL, 103], ["ItemB-3", MF_NORMAL|MF_LAST, 104], ["ItemC", MF_NORMAL, 105]]; nItem=ShowMenu(lpItems, POS_CARET, POS_CARET); WScript.Echo("" + nItem); AkelPad.IsInclude _________________ Определить запущен ли скрипт с помощью метода AkelPad.Include(). IsInclude(); Возвращаемое значение Строка. Имя добавляемого файла, если скрипт запущен с помощью метода AkelPad.Include() или "" в противном случае. Пример: WScript.Echo("" + AkelPad.IsInclude()); AkelPad.OpenFile ________________ Открыть файл. OpenFile(pFile[, nFlags][, nCodePage][, bBOM]); Аргументы pFile Файл для открытия. nFlags 0x001 //OD_ADT_BINARYERROR Проверить является ли файл бинарным. 0x002 //OD_ADT_REGCODEPAGE Если кодировка файла была сохранена в реестре, то она будет использована // с флагом OD_ADT_DETECTBOM, если нет, то следующие флаги будут использованы // OD_ADT_DETECTCODEPAGE|OD_ADT_DETECTBOM. 0x004 //OD_ADT_DETECTCODEPAGE Определить кодировку. 0x008 //OD_ADT_DETECTBOM Определить наличие сигнатуры BOM. 0x010 //OD_ADT_NOMESSAGES Не выводить сообщения при ошибке автоопределения. 0x020 //OD_ADT_ONLYBOM Определить кодировку, только если присутствует сигнатура BOM, иначе будет использована кодировка по умолчанию. 0x100 //OD_REOPEN Не создавать новое окно, использовать имеющееся. 0x200 //OD_NOSCROLL Не восстанавливать прокрутку текста. 0x400 //OD_MULTIFILE Ещё документы в очереди. Использовать MB_YESNOCANCEL вместо MB_OKCANCEL. 0x800 //OD_NOUPDATE Не обновлять информацию о файле в программе. //По умолчанию 0xD (OD_ADT_BINARYERROR|OD_ADT_DETECTCODEPAGE|OD_ADT_DETECTBOM). nCodePage Кодировка файла, игнорируется если (nFlags & OD_ADT_DETECTCODEPAGE) bBOM Сигнатура BOM, игнорируется если (nFlags & OD_ADT_DETECTBOM) Возвращаемое значение 0 //EOD_SUCCESS Успешно. -1 //EOD_ADT_OPEN Определение кодировки, невозможно открыть файл. -2 //EOD_ADT_ALLOC Определение кодировки, невозможно выделить память. -3 //EOD_ADT_READ Определение кодировки, ошибка чтения файла. -11 //EOD_OPEN Невозможно открыть файл. -13 //EOD_WINDOWEXIST Файл уже открыт. -14 //EOD_CODEPAGEERROR Кодировка не реализована. -15 //EOD_STOP Остановлено из AKDN_OPENDOCUMENT_START. -16 //EOD_STREAMIN Ошибка в EM_STREAMIN. -17 //EOD_DOCUMENTSLIMIT Достигнут лимит документов в режиме MDI. -21 //EOD_MSGCANCELCREATE Пользователь нажал Отмена в сообщении "Создать новый файл?". -22 //EOD_MSGCANCELBINARY Пользователь нажал Отмена в сообщении "Бинарный файл. Продолжить?" -23 //EOD_MSGNOCREATE Пользователь нажал Нет в сообщении "Создать новый файл?". -24 //EOD_MSGNOBINARY Пользователь нажал Нет в сообщении "Бинарный файл. Продолжить?" Пример: var bResult=AkelPad.OpenFile("C:\\MyFile.txt"); AkelPad.ReadFile ________________ Получить содержимое файла. ReadFile(pFile[, nFlags][, nCodePage][, bBOM][, nBytesMax]); Аргументы pFile Файл для чтения. nFlags 0x01 //ADT_BINARYERROR Проверить является ли файл бинарным. 0x02 //ADT_REGCODEPAGE Если кодировка файла была сохранена в реестре, то она будет использована // с флагом ADT_DETECTBOM, если нет, то следующие флаги будут использованы // ADT_DETECTCODEPAGE|ADT_DETECTBOM. 0x04 //ADT_DETECTCODEPAGE Определить кодировку. 0x08 //ADT_DETECTBOM Определить наличие сигнатуры BOM. 0x10 //ADT_NOMESSAGES Не выводить сообщения при ошибке автоопределения. 0x20 //ADT_ONLYBOM Определить кодировку, только если присутствует сигнатура BOM, иначе будет использована кодировка по умолчанию. //По умолчанию 0xD (ADT_BINARYERROR|ADT_DETECTCODEPAGE|ADT_DETECTBOM). nCodePage Кодировка файла, игнорируется если (nFlags & ADT_DETECTCODEPAGE). bBOM Сигнатура BOM, игнорируется если (nFlags & ADT_DETECTBOM). nBytesMax Прочитать указанное количество первых байт файла. Если -1, будет прочитан весь файл (по умолчанию). Возвращаемое значение Строка. Содержимое файла. Пример: var pText=AkelPad.ReadFile("C:\\MyFile.txt"); AkelPad.WriteFile _________________ Записать содержимое файла. WriteFile(vFile, pContent, nContentLen, nCodePage, bBOM[, nFlags]); Аргументы vFile Файл для записи как строка или как дескриптор файла. pContent Содержимое для записи. nContentLen Длина содержимого. Если -1, длина вычисляется автоматически. nCodePage Кодировка файла. bBOM Сигнатура BOM. nFlags 0x1 //WFF_WRITEREADONLY Игнорировать атрибут только чтение. Только, если vFile указан как строка. 0x2 //WFF_APPENDFILE Добавить содержимое в конец файла. Только, если vFile указан как строка. //По умолчанию 0x0. Возвращаемое значение 0 //ESD_SUCCESS Успешно. -1 //ESD_OPEN Невозможно открыть файл для записи. -2 //ESD_WRITE Невозможно записать в файл. -3 //ESD_READONLY Файл имеет атрибут только-чтение. Пример: AkelPad.WriteFile("C:\\MyFile.txt", "Text", -1, 65001, true); AkelPad.SaveFile ________________ Сохранить документ. SaveFile(hHandle, pFile[, nCodePage][, bBOM][, nFlags][, hDoc]); Аргументы hHandle Дескриптор окна редактирования. Если ноль, то используется дескриптор активного окна редактирования. pFile Имя файла для сохранения. nCodePage Кодировка сохранения. Если -1 либо не указана, будет использована текущая кодировка. bBOM Сигнатура BOM файла. 1 - присутствует, 0 - отсутствует, -1 либо не указана - используется текущий BOM. nFlags 0x1 //SD_UPDATE Обновить информацию о файле в программе. 0x2 //SD_SELECTION Сохранить только выделение. //По умолчанию 0x1 (SD_UPDATE). hDoc Дескриптор документа. Если ноль (по умолчанию), то определяется автоматически. Возвращаемое значение 0 //ESD_SUCCESS Успешно. -1 //ESD_OPEN Невозможно открыть файл. -2 //ESD_WRITE Невозможно записать файл. -3 //ESD_READONLY Файл имеет атрибут только-чтение. -4 //ESD_CODEPAGEERROR Кодировки не реализована. -5 //ESD_STOP Остановлено из AKDN_SAVEDOCUMENT_START. -6 //ESD_STREAMOUT Ошибка в EM_STREAMOUT. Пример: var hWndEdit=AkelPad.GetEditWnd(); var nResult=AkelPad.SaveFile(hWndEdit, "C:\\MyFile.txt"); AkelPad.SystemFunction (+ActiveX) _________________________________ Создать объект системной функции. SystemFunction(); Возвращаемое значение Объект. Объект системной функции. Пример: var oSys=AkelPad.SystemFunction(); AkelPad.SystemFunction().AddParameter (+ActiveX) ________________________________________________ Добавить параметр в функцию. AddParameter(vParameter); Аргументы vParameter Параметр. Возвращаемое значение Ноль. Пример: См. AkelPad.SystemFunction().Call пример со старым синтаксисом. AkelPad.SystemFunction().Call (+ActiveX) ________________________________________ Вызвать системную функцию. Call(vDllFunction[, ...]); Аргументы vDllFunction Имя функции в формате строки "Библиотека::Функция" или адрес функции в формате числа. ... Параметры функции, должны быть числом, указателем либо строкой. Строковой параметр: в Windows 95/98/Me - однобайтовая строка, в Windows NT/2000/XP - двухбайтовая строка. Возвращаемое значение Число. Результат вызова. Пример (новый синтаксис): var hMainWnd=AkelPad.GetMainWnd(); var oSys=AkelPad.SystemFunction(); oSys.Call("user32::ShowWindow", hMainWnd, 6 /*SW_MINIMIZE*/); Пример (старый синтаксис): var hMainWnd=AkelPad.GetMainWnd(); var oSys=AkelPad.SystemFunction(); oSys.AddParameter(hMainWnd); oSys.AddParameter(6 /*SW_MINIMIZE*/); oSys.Call("user32::ShowWindow"); AkelPad.SystemFunction().GetLastError (+ActiveX) ________________________________________________ Определить последнюю ошибку вызванной системной функции. GetLastError(); Возвращаемое значение Число. Последняя ошибка вызванной системной функции. Пример: var hMainWnd=AkelPad.GetMainWnd(); var oSys=AkelPad.SystemFunction(); var nError; oSys.Call("user32::ShowWindow", hMainWnd, 6 /*SW_MINIMIZE*/); nError=oSys.GetLastError(); AkelPad.SystemFunction().RegisterCallback (+ActiveX) ____________________________________________________ Зарегистрировать функцию обратного вызова. RegisterCallback(lpCallback[, nArgCount]); Аргументы lpCallback Функция обратного вызова. nArgCount Число аргументов в функции обратного вызова. Можно не указывать в JScript, но необходимо в VBScript. Замечания Максимальное число работающих функций обратного вызова не должно превышать 30-ти. Возвращаемое значение Объект. Указатель на функцию. Пример (обратный вызов из JScript): var oSys=AkelPad.SystemFunction(); var lpEnumWindowsCallback; var nStopAfter=3; if (lpEnumWindowsCallback=oSys.RegisterCallback(EnumWindowsProc)) { oSys.Call("user32::EnumWindows", lpEnumWindowsCallback, 0); oSys.UnregisterCallback(lpEnumWindowsCallback); } function EnumWindowsProc(hWnd, lParam) { //Convert hWnd to hex if (hWnd < 0) hWnd=(0xFFFFFFFF + 1) + hWnd; hWnd="0x" + hWnd.toString(16).toUpperCase(); //Show parameters WScript.Echo("hWnd=" + hWnd + "; lParam=" + lParam); if (--nStopAfter <= 0) return false; else return true; } Пример (обратный вызов из VBScript): set oSys=AkelPad.SystemFunction() nStopAfter=3 set lpEnumWindowsCallback = oSys.RegisterCallback (GetRef("EnumWindowsProc"), 2) oSys.Call "user32::EnumWindows", lpEnumWindowsCallback, 0 oSys.UnregisterCallback lpEnumWindowsCallback Function EnumWindowsProc(hWnd, lParam) 'Convert hWnd to hex hWnd="0x" & Hex(hWnd) 'Show parameters WScript.Echo "hWnd=" & hWnd & "; lParam=" & lParam nStopAfter = nStopAfter - 1 if nStopAfter <= 0 Then EnumWindowsProc = 0 else EnumWindowsProc = 1 end if End Function AkelPad.SystemFunction().UnregisterCallback (+ActiveX) ______________________________________________________ Удалить регистрацию функции обратного вызова. UnregisterCallback(oFunction); Аргументы oFunction Указатель на функцию. Возвращаемое значение Ноль. Пример: См. пример RegisterCallback. AkelPad.MemAlloc (+ActiveX) ___________________________ Выделить память. MemAlloc(nSize); Аргументы nSize Размер в байтах. Возвращаемое значение Число. Указатель на выделенную память. Пример: var hMainWnd=AkelPad.GetMainWnd(); var oSys=AkelPad.SystemFunction(); var pMessage="MyMessage"; var pCaption="MyCaption"; var lpMessageBuffer; var lpCaptionBuffer; if (lpMessageBuffer=AkelPad.MemAlloc(256)) { AkelPad.MemCopy(lpMessageBuffer, pMessage.substr(0, 255), 0 /*DT_ANSI*/); if (lpCaptionBuffer=AkelPad.MemAlloc(256)) { AkelPad.MemCopy(lpCaptionBuffer, pCaption.substr(0, 255), 0 /*DT_ANSI*/); oSys.Call("user32::MessageBoxA", hMainWnd, lpMessageBuffer, lpCaptionBuffer, 64 /*MB_ICONINFORMATION*/); AkelPad.MemFree(lpCaptionBuffer); } AkelPad.MemFree(lpMessageBuffer); } AkelPad.MemCopy (+ActiveX) __________________________ Копировать память. MemCopy(lpPointer, vData, nType[, nLength]); Аргументы lpPointer Указатель на память. vData Данные для копирования. nType Тип параметра vData: 0 //DT_ANSI Копируется однобайтовая строка в память (Ansi). 1 //DT_UNICODE Копируется двухбайтовая строка в память (Unicode). 2 //DT_QWORD Копируется восьмибайтовое число в память на x64 (QWORD) или четырехбайтовое число на x86 (DWORD). 3 //DT_DWORD Копируется четырехбайтовое число в память (DWORD). 4 //DT_WORD Копируется двухбайтовое число в память (WORD). 5 //DT_BYTE Копируется однобайтовое число в память (BYTE). nLength Длина строки. Если -1, копируется вся строка (по умолчанию -1). Для DT_ANSI и DT_UNICODE. Возвращаемое значение Число. Количество скопированных байтов. Пример: См. пример MemAlloc. AkelPad.MemRead (+ActiveX) __________________________ Прочитать память. MemRead(lpPointer, nType[, nLength]); Аргументы lpPointer Указатель на память. nType 0 //DT_ANSI Прочитать однобайтовую строку из памяти (Ansi). 1 //DT_UNICODE Прочитать двухбайтовую строку из памяти (Unicode). 2 //DT_QWORD Прочитать восьмибайтовое число из памяти на x64 (QWORD) или четырехбайтовое число на x86 (DWORD). 3 //DT_DWORD Прочитать четырехбайтовое число из памяти (DWORD). 4 //DT_WORD Прочитать двухбайтовое число из памяти (WORD). 5 //DT_BYTE Прочитать однобайтовое число из памяти (BYTE). nLength Длина строки. Если -1, длина строки ограничивается NULL символом (по умолчанию -1). Для DT_ANSI и DT_UNICODE. Возвращаемое значение Строка, либо число. Пример: var oSys=AkelPad.SystemFunction(); var lpDirBuffer; var pWinDir; if (lpDirBuffer=AkelPad.MemAlloc(256)) { oSys.Call("kernel32::GetWindowsDirectoryA", lpDirBuffer, 256); pWinDir=AkelPad.MemRead(lpDirBuffer, 0 /*DT_ANSI*/); AkelPad.MemFree(lpDirBuffer); } AkelPad.MemStrPtr (+ActiveX) ____________________________ Получить указатель из строки или на строку. MemStrPtr(pString[, bConvert]); Аргументы pString Строка константой или объектом. bConvert true получить указатель из pString, т.е конвертировать содержимое pString в число. false получить указатель на pString (по умолчанию). Возвращаемое значение Число. Указатель. Пример: var hMainWnd=AkelPad.GetMainWnd(); AkelPad.SendMessage(hMainWnd, 1206 /*AKD_GOTOW*/, 0x1 /*GT_LINE*/, AkelPad.MemStrPtr("10:3")); AkelPad.MemPtrStr (+ActiveX) ____________________________ Получить строковое представление указателя. MemPtrStr(lpPointer); Аргументы lpPointer Любой указатель. Возвращаемое значение Строка. Строковое представление указателя. Пример: var hMainWnd=AkelPad.GetMainWnd(); WScript.Echo(AkelPad.MemPtrStr(hMainWnd)); AkelPad.MemFree (+ActiveX) __________________________ Освободить память. MemFree(lpPointer); Аргументы lpPointer Указатель на память. Возвращаемое значение Ноль. Пример: См. пример MemAlloc. AkelPad.DebugJIT (+ActiveX) ___________________________ Точка останова. Вызвать программу отладки. DebugJIT(); Возвращаемое значение Ноль. AkelPad.Debug (+ActiveX) ________________________ Отладить использование памяти. Debug([dwType]); Аргументы dwType 0x01 //DBG_MEMREAD Отладить чтение памяти. 0x02 //DBG_MEMWRITE Отладить запись памяти. 0x04 //DBG_MEMFREE Отладить освобождение памяти. 0x08 //DBG_MEMLEAK Отладить утечку памяти. 0x10 //DBG_SYSCALL Отладить вызов системных функций. //По умолчанию 0x1f (DBG_MEMREAD|DBG_MEMWRITE|DBG_MEMFREE|DBG_MEMLEAK|DBG_SYSCALL). Возвращаемое значение Предыдущее значение dwType. Пример: var lpBuffer; AkelPad.Debug(); if (lpBuffer=AkelPad.MemAlloc(2)) { AkelPad.MemCopy(lpBuffer, 123, 3 /*DT_DWORD*/); AkelPad.MemFree(lpBuffer); } AkelPad.VarType (+ActiveX) __________________________ Получить тип переменной. VarType(vData); Аргументы vData Переменная. Возвращаемое значение Число. Тип (VARTYPE) переменной (VARIANT). 0 //VT_EMPTY 1 //VT_NULL 2 //VT_I2 3 //VT_I4 4 //VT_R4 5 //VT_R8 6 //VT_CY 7 //VT_DATE 8 //VT_BSTR 9 //VT_DISPATCH 10 //VT_ERROR 11 //VT_BOOL 12 //VT_VARIANT 13 //VT_UNKNOWN 14 //VT_DECIMAL 16 //VT_I1 17 //VT_UI1 18 //VT_UI2 19 //VT_UI4 20 //VT_I8 21 //VT_UI8 22 //VT_INT 23 //VT_UINT 24 //VT_VOID 25 //VT_HRESULT 26 //VT_PTR 27 //VT_SAFEARRAY 28 //VT_CARRAY 29 //VT_USERDEFINED 30 //VT_LPSTR 31 //VT_LPWSTR 36 //VT_RECORD 37 //VT_INT_PTR 38 //VT_UINT_PTR 64 //VT_FILETIME 65 //VT_BLOB 66 //VT_STREAM 67 //VT_STORAGE 68 //VT_STREAMED_OBJECT 69 //VT_STORED_OBJECT 70 //VT_BLOB_OBJECT 71 //VT_CF 72 //VT_CLSID 73 //VT_VERSIONED_STREAM 0x0fff //VT_BSTR_BLOB 0x1000 //VT_VECTOR 0x2000 //VT_ARRAY 0x4000 //VT_BYREF 0x8000 //VT_RESERVED 0xffff //VT_ILLEGAL 0x0fff //VT_ILLEGALMASKED 0x0fff //VT_TYPEMASK Пример: var pString="123"; WScript.Echo("" + AkelPad.VarType(pString)); AkelPad.GetArgLine __________________ Получить строку аргументов. GetArgLine([bNoEncloseQuotes]); Аргументы bNoEncloseQuotes true Исключить обрамляющие кавычки (по умолчанию). false Оставить обрамляющие кавычки. Возвращаемое значение Строка. Строка аргументов. Пример: var pArgLine; if (pArgLine=AkelPad.GetArgLine(0)) WScript.Echo(pArgLine); AkelPad.VarDispatch (+ActiveX) ______________________________ Получить IDispatch объект по указателю. VarDispatch(lpPointer); Аргументы lpPointer Указатель на IDispatch объект. Возвращаемое значение Объект. IDispatch объект. Пример: var oIE=new ActiveXObject("InternetExplorer.Application"); //IDispatch -> указатель var nIE=_PtrAdd(oIE, 0); //Указатель -> IDispatch var oReturnIE=AkelPad.VarDispatch(nIE); AkelPad.GetArgValue ___________________ Получить значение аргумента по имени. GetArgValue(pArgName, vDefault); Аргументы pArgName Имя аргумента. vDefault Значение по умолчанию. Назначается в случае, если указанное имя аргумента не найдено. Возвращаемое значение Значение аргумента. Тип наследуется от значения по умолчанию. Пример: //Скрипт был вызван следующим образом: //Call("Scripts::Main", 1, "MyScript.js", `-ArgName1=0.01 -ArgName2="Value2" /ArgName3=0x10`) //Получим значения 0.01, Value2, 0x10 по именам ArgName1, ArgName2, ArgName3. var nArg1=AkelPad.GetArgValue("ArgName1", 0); var pArg2=AkelPad.GetArgValue("ArgName2", ""); var nArg3=AkelPad.GetArgValue("ArgName3", 0); WScript.Echo("VarType=" + AkelPad.VarType(nArg1) + "; ArgValue=" + nArg1 + "\r" + "VarType=" + AkelPad.VarType(pArg2) + "; ArgValue=" + pArg2 + "\r" + "VarType=" + AkelPad.VarType(nArg3) + "; ArgValue=" + nArg3 + "\r"); AkelPad.ScriptSettings ______________________ Создать объект настроек скрипта. ScriptSettings(); Возвращаемое значение Объект. Объект настроек скрипта. Пример: var oSet=AkelPad.ScriptSettings(); AkelPad.ScriptSettings().Begin ______________________________ Открыть настройки. Begin(pScriptBaseName, nFlags); Аргументы pScriptBaseName Имя скрипта без расширения. Если "", использовать текущее имя скрипта. nFlags 0x01 //POB_READ Начать операции чтения. 0x02 //POB_SAVE Начать операции записи. 0x04 //POB_CLEAR Начать операции записи с очисткой (POB_SAVE|POB_CLEAR). 0x20 //POB_PLUGS Настройки плагина, pScriptBaseName - имя плагина без расширения. 0x40 //POB_PROGRAM Настройки программы, pScriptBaseName - игнорируется. Возвращаемое значение Число. Дескриптор настроек. Пример: См. примеры Read, Write и Delete. AkelPad.ScriptSettings().Read _____________________________ Прочитать настройку. Read(vOptionName, nType[, vDefault]); Аргументы vOptionName Имя настройки как строка или индекс как число. nType 1 //PO_DWORD Прочитать четырехбайтовое число (DWORD). 2 //PO_BINARY Прочитать бинарные данные. Возвращается указатель на бинарные данные, который необходимо освободить с помощью AkelPad.MemFree. 3 //PO_STRING Прочитать строку. 11 //PO_ENUM Получить имя настройки по индексу. Индекс передается в vOptionName. 20 //PO_BINARYSTRING Прочитать текст (обычно многострочный), который был сохранен как бинарные данные. 21 //PO_BINARYSIZE Получить размер бинарных данных в байтах. vDefault Данные по умолчанию. Возвращаемое значение Строка, либо число. Пример (прочитать настройки скрипта): var oSet=AkelPad.ScriptSettings(); if (oSet.Begin("", 0x1 /*POB_READ*/)) { pString=oSet.Read("String", 3 /*PO_STRING*/); bMultiline=oSet.Read("Multiline", 1 /*PO_DWORD*/); oSet.End(); } Пример (прочитать настройки плагина): var oSet=AkelPad.ScriptSettings(); var pText=""; if (oSet.Begin("Toolbar", 0x21 /*POB_READ|POB_PLUGS*/)) { pText=oSet.Read("ToolBarText", 10 /*PO_BINARYSTRING*/); oSet.End(); } WScript.Echo(pText.substr(0,500)); Пример (перебрать имена настроек плагина): var hMainWnd=AkelPad.GetMainWnd(); var oSet=AkelPad.ScriptSettings(); var pOption; var nIndex; if (oSet.Begin("Scripts", 0x21 /*POB_READ|POB_PLUGS*/)) { for (nIndex=0; ; ++nIndex) { if ((pOption=oSet.Read(nIndex, 11 /*PO_ENUM*/)) == undefined) break; if (AkelPad.MessageBox(hMainWnd, pOption + "\n\nFind next?", WScript.ScriptName, 4 /*MB_YESNO*/) == 7 /*IDNO*/) break; } oSet.End(); } AkelPad.ScriptSettings().Write ______________________________ Записать настройку. Write(pOptionName, nType, vData[, nDataSize]); Аргументы pOptionName Имя настройки. nType 1 //PO_DWORD Записать четырехбайтовое число (DWORD). 2 //PO_BINARY Записать бинарные данные. 3 //PO_STRING Записать строку. vData Данные для записи. nDataSize Размер данных для записи в байтах (по умолчанию -1). Возвращаемое значение Число. Размер записанных данных в байтах. Пример: var oSet=AkelPad.ScriptSettings(); if (oSet.Begin("", 0x2 /*POB_SAVE*/)) { oSet.Write("String", 3 /*PO_STRING*/, "Str1"); oSet.Write("Sensitive", 1 /*PO_DWORD*/, true); oSet.End(); } AkelPad.ScriptSettings().Delete _______________________________ Удалить настройку. Delete(pOptionName); Аргументы pOptionName Имя настройки. Возвращаемое значение true успешно. false не успешно. Пример: var oSet=AkelPad.ScriptSettings(); if (oSet.Begin("", 0x2 /*POB_SAVE*/)) { oSet.Delete("String"); oSet.Delete("Sensitive"); oSet.End(); } AkelPad.ScriptSettings().End ____________________________ Закрыть настройки. End(); Возвращаемое значение true успешно. false не успешно. Пример: См. примеры Read, Write и Delete. AkelPad.WindowRegisterClass (+ActiveX) ______________________________________ Зарегистрировать класс окна. WindowRegisterClass(pClassName[, ...]); Аргументы pClassName Имя класса для регистрации. ... Фильтр сообщений. Будут приходить только указанные сообщения. Если не указан, будут приходить все сообщения. Возвращаемое значение Число. Атом класса. Пример (JScript): var hMainWnd=AkelPad.GetMainWnd(); var oSys=AkelPad.SystemFunction(); var hInstanceDLL=AkelPad.GetInstanceDll(); var hWndDialog; if (hMainWnd) { if (AkelPad.WindowRegisterClass("NewClass")) { //Create dialog hWndDialog=oSys.Call("user32::CreateWindowEx" + _TCHAR, 0, //dwExStyle "NewClass", //lpClassName 0, //lpWindowName 0x90CA0000, //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX 0, //x 0, //y 351, //nWidth 179, //nHeight hMainWnd, //hWndParent 0, //ID hInstanceDLL, //hInstance DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass. if (hWndDialog) { //Disable main window, to make dialog modal oSys.Call("user32::EnableWindow", hMainWnd, false); //Message loop AkelPad.WindowGetMessage(); } AkelPad.WindowUnregisterClass("NewClass"); } } function DialogCallback(hWnd, uMsg, wParam, lParam) { if (uMsg == 1 /*WM_CREATE*/) { } else if (uMsg == 256 /*WM_KEYDOWN*/) { if (wParam == 27 /*VK_ESCAPE*/) { //Escape key pushes Cancel button oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 273 /*WM_COMMAND*/, 2 /*IDCANCEL*/, 0); } } else if (uMsg == 273 /*WM_COMMAND*/) { if ((wParam & 0xffff) == 2 /*IDCANCEL*/) { oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/, 0, 0); } } else if (uMsg == 16 /*WM_CLOSE*/) { //Enable main window oSys.Call("user32::EnableWindow", hMainWnd, true); //Destroy dialog oSys.Call("user32::DestroyWindow", hWnd); } else if (uMsg == 2 /*WM_DESTROY*/) { //Exit message loop oSys.Call("user32::PostQuitMessage", 0); } return 0; } Пример (VBScript): 'Variables hMainWnd=AkelPad.GetMainWnd() hInstanceDLL=AkelPad.GetInstanceDll() set oSys=AkelPad.SystemFunction() set lpCallbackPtr=GetRef("DialogCallback") hWndDialog=0 'Constants Const WM_CREATE=1 Const WM_KEYDOWN=256 Const WM_COMMAND=273 Const WM_CLOSE=16 Const WM_DESTROY=2 Const VK_ESCAPE=27 Const IDCANCEL=2 if vbPtrMath(hMainWnd, "!=", 0) then if AkelPad.WindowRegisterClass("NewClass") then 'Create dialog WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX hWndDialog=oSys.Call("user32::CreateWindowEx" & vbTCHAR, 0, "NewClass", 0, &H90CA0000, 0, 0, 351, 179, hMainWnd, 0, hInstanceDLL, lpCallbackPtr) if vbPtrMath(hWndDialog, "!=", 0) then 'Disable main window, to make dialog modal oSys.Call "user32::EnableWindow", hMainWnd, false 'Message loop AkelPad.WindowGetMessage() end if AkelPad.WindowUnregisterClass "NewClass" end if end if Function DialogCallback(hWnd, uMsg, wParam, lParam) if uMsg = WM_CREATE then elseif uMsg = WM_KEYDOWN then if wParam = VK_ESCAPE then 'Escape key pushes Cancel button oSys.Call "user32::PostMessage" & vbTCHAR, hWndDialog, WM_COMMAND, IDCANCEL, 0 end if elseif uMsg = WM_COMMAND then if (wParam And &Hffff) = IDCANCEL then oSys.Call "user32::PostMessage" & vbTCHAR, hWndDialog, WM_CLOSE, 0, 0 end if elseif uMsg = WM_CLOSE then 'Enable main window oSys.Call "user32::EnableWindow", hMainWnd, true 'Destroy dialog oSys.Call "user32::DestroyWindow", hWnd elseif uMsg = WM_DESTROY then 'Exit message loop oSys.Call "user32::PostQuitMessage", 0 end if DialogCallback=0 End Function AkelPad.WindowUnregisterClass (+ActiveX) ________________________________________ Отменить регистрацию класса окна. WindowUnregisterClass(pClassName); Аргументы pClassName Имя класса для отмены регистрации. Возвращаемое значение true успешно. false не успешно. Пример: См. пример WindowRegisterClass. AkelPad.WindowRegisterDialog (+ActiveX) _______________________________________ Зарегистрировать диалог для обработки в цикле сообщений. Используется в случае, если диалог создан без WindowRegisterClass. WindowRegisterDialog(hWnd); Аргументы hWnd Дескриптор диалога. Возвращаемое значение true успешно. false диалог уже зарегистрирован. Пример: var hMainWnd=AkelPad.GetMainWnd(); var oSys=AkelPad.SystemFunction(); var hInstanceDLL=AkelPad.GetInstanceDll(); var hGuiFont=oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/); var hWndModeless; var hWndTestButton; var IDC_TEST_BUTTON=10001; //Open "Find" dialog if (hWndModeless=AkelPad.SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, 0)) AkelPad.SendMessage(hWndModeless, 273 /*WM_COMMAND*/, 2 /*IDCANCEL*/, 0); AkelPad.Command(4158 /*IDM_EDIT_FIND*/); hWndModeless=AkelPad.SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, 0); //Create test button hWndTestButton=oSys.Call("user32::CreateWindowEx" + _TCHAR, 0, //dwExStyle "BUTTON", //lpClassName 0, //lpWindowName 0x50010000, //WS_VISIBLE|WS_CHILD|WS_TABSTOP 294, //x 80, //y 81, //nWidth 23, //nHeight hWndModeless, //hWndParent IDC_TEST_BUTTON, //ID hInstanceDLL, //hInstance 0); //lpParam //Set font and text SetWindowFontAndText(hWndTestButton, hGuiFont, "Test"); //Subclass dialog if (AkelPad.WindowSubClass(hWndModeless, DialogCallback, 273 /*WM_COMMAND*/, 2 /*WM_DESTROY*/)) { //Register dialog for message loop AkelPad.WindowRegisterDialog(hWndModeless); //Message loop AkelPad.WindowGetMessage(); //Unregister and unsubclass AkelPad.WindowUnregisterDialog(hWndModeless); AkelPad.WindowUnsubClass(hWndModeless); } function DialogCallback(hWnd, uMsg, wParam, lParam) { if (uMsg == 273) //WM_COMMAND { if (LOWORD(wParam) == IDC_TEST_BUTTON) { oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, "Test " + oSys.Call("kernel32::GetTickCount")); } } else if (uMsg == 2) //WM_DESTROY { //Exit message loop oSys.Call("user32::PostQuitMessage", 0); } return 0; } function SetWindowFontAndText(hWnd, hFont, pText) { AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, 1); oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, pText); } function LOWORD(dwNumber) { return (dwNumber & 0xffff); } AkelPad.WindowUnregisterDialog (+ActiveX) _________________________________________ Отменить регистрацию диалога. WindowUnregisterDialog(hWnd); Аргументы hWnd Дескриптор диалога. Возвращаемое значение true успешно. false диалог не зарегистрирован. Пример: См. пример WindowRegisterDialog. AkelPad.CreateDialog (+ActiveX) _______________________________ Создать диалог. CreateDialog(nExStyle, pClassName, pTitle, nStyle, x, y, nWidth, nHeight, hWndParent, lParam[, nFlags][, hMenu][, hInstance][, pFaceName][, nFontStyle][, nPointSize], "|", nExStyle1, pClassName1, pTitle1, nStyle1, x1, y1, nWidth1, nHeight1, nId1[, lParam1], "|", nExStyle2, pClassName2, pTitle2, nStyle2, x2, y2, nWidth2, nHeight2, nId2[, lParam2], "|", [...]); Аргументы nExStyle Расширенный стиль диалога. См. описание CreateWindowEx в MSDN. pClassName Имя класса зарегистрированное с помощью AkelPad.WindowRegisterClass. pTitle Текст заголовка диалога. nStyle Стиль диалога. См. описание CreateWindowEx в MSDN. x Горизонтальная позиция диалога в экранных координатах. y Вертикальная позиция диалога в экранных координатах. nWidth Ширина диалога. nHeight Высота диалога. hWndParent Родительское окно создаваемого диалога. lParam Указатель на процедуру диалога. nFlags 0x1 //CDF_MODAL Создать модальный диалог. Если не указано, создаётся немодальный диалог, который требует наличия AkelPad.WindowGetMessage. 0x2 //CDF_PIXELS Координаты указываются в пикселях для 96 DPI. Если не указано, координаты // указываются в единицах диалогового окна, которые зависят от размеров шрифта диалога. //По умолчанию 0x0. hMenu Определяет порядковое значение ресурса меню в исполняемом файле или строку, которая определяет название ресурса меню в исполняемом файле. Если ноль, не используется (по умолчанию). hInstance Дескриптор модуля, который будет связан с окном. Если ноль, будет использован дескриптор AkelPad.GetInstanceDll (по умолчанию). pFaceName Имя шрифта, например, "Courier". Если "", используется системный шрифт для диалогов (по умолчанию). Обрабатывается только, когда nStyle имеет флаг 0x40 /*DS_SETFONT*/. nFontStyle 0 игнорировать (по умолчанию). 1 обычный шрифт. 2 жирный шрифт. 3 курсивный шрифт. 4 жирный курсивный шрифт. Обрабатывается только, когда nStyle имеет флаг 0x40 /*DS_SETFONT*/. nPointSize Размер шрифта. Не изменяется, если 0 (по умолчанию). Обрабатывается только, когда nStyle имеет флаг 0x40 /*DS_SETFONT*/. "|" Свидетельствует об окончании передачи параметров диалога и начале передачи параметров элементов управления. nExStyle1 Расширенный стиль окна. См. описание CreateWindowEx в MSDN. pClassName1 Имя класса, например, "BUTTON". См. описание CreateWindowEx в MSDN. pTitle1 Текст элемента управления. nStyle1 Стиль окна. См. описание CreateWindowEx в MSDN. x1 Горизонтальная позиция окна в клиентских координатах (относительно родительского окна). y1 Вертикальная позиция окна в клиентских координатах (относительно родительского окна). nWidth1 Ширина окна. nHeight1 Высота окна. nId1 Идентификатор элемента управления. lParam1 Данные для создания окна. Первый WORD указывает размер данных, в байтах, для создания (включая WORD размера). Элемент управления получит эти данные в параметре lParam сообщения WM_CREATE. Если ноль, не используется (по умолчанию). "|" Свидетельствует об окончании передачи параметров элемента управления. ... Параметры следующего элемента управления. Возвращаемое значение Если nFlags не содержит флаг CDF_MODAL, то возвращается дескриптор диалога. Если nFlags содержит флаг CDF_MODAL, то возвращается значение переданное в "user32::EndDialog". Пример: var hMainWnd=AkelPad.GetMainWnd(); var oSys=AkelPad.SystemFunction(); var hWndDialog=0; var wCommand; var dwFlags=0x2 /*CDF_PIXELS*/; //Control IDs var IDC_BUTTON1=1001; var IDC_BUTTON2=1002; var IDC_EDIT=1003; if (AkelPad.WindowRegisterClass("My Class")) { AkelPad.CreateDialog(0, "My Class", "My Title", 0x90ca0040 /*DS_SETFONT|WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX*/, 10, 10, 300, 200, hMainWnd, DialogCallback, dwFlags, "|", 0, "BUTTON", "Button text 1", 0x50010001 /*WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON*/, 10, 10, 200, 20, IDC_BUTTON1, "|", 0, "BUTTON", "Button text 2", 0x50010000 /*WS_VISIBLE|WS_CHILD|WS_TABSTOP*/, 10, 50, 200, 20, IDC_BUTTON2, "|", 0, "EDIT", "Edit text 3", 0x50010000 /*WS_VISIBLE|WS_CHILD|WS_TABSTOP*/, 10, 90, 200, 20, IDC_EDIT); if (hWndDialog && !(dwFlags & 0x1 /*CDF_MODAL*/)) { AkelPad.ScriptNoMutex(); AkelPad.WindowGetMessage(0x4 /*WGM_KEYDOWNUP*/); } AkelPad.WindowUnregisterClass("My Class"); } function DialogCallback(hWnd, uMsg, wParam, lParam) { if (uMsg == 0x110 /*WM_INITDIALOG*/) { hWndDialog=hWnd; } else if (uMsg == 273 /*WM_COMMAND*/) { wCommand=LOWORD(wParam); if (wCommand == IDC_BUTTON1 || wCommand == IDC_BUTTON2) { AkelPad.MessageBox(hWnd, "Button=" + wCommand, WScript.ScriptName, 0 /*MB_OK*/); } else if (wCommand == 2 /*IDCANCEL*/) { //Destroy dialog if (!(dwFlags & 0x1 /*CDF_MODAL*/)) { //Exit message loop oSys.Call("user32::PostQuitMessage", 0); oSys.Call("user32::DestroyWindow", hWnd); } else oSys.Call("user32::EndDialog", hWnd, 0); } } return 0; } function LOWORD(dwNumber) { return (dwNumber & 0xffff); } AkelPad.WindowGetMessage (+ActiveX) ___________________________________ Обработать сообщения потока (цикл сообщений). WindowGetMessage([nFlags]); Аргументы nFlags 0x1 //WGM_ENABLE Устанавливается в любом случае. 0x2 //WGM_NOKEYSEND Не посылать сообщения клавиш диалогу от дочерних окон // (WM_KEYDOWN, WM_KEYUP, WM_CHAR, WM_DEADCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_SYSCHAR, WM_SYSDEADCHAR, WM_UNICHAR). 0x4 //WGM_KEYDOWNUP Посылать только сообщения WM_KEYDOWN, WM_KEYUP диалогу от дочерних окон. //По умолчанию 0x0. Возвращаемое значение Ноль. Пример: См. пример WindowRegisterClass. AkelPad.WindowSubClass (+ActiveX) _________________________________ Установить перехватчик сообщений окна. WindowSubClass(hHandle, lpFunction[, ...]); Аргументы hHandle Дескриптор окна или одно из следующих значений: 1 //WSC_MAINPROC Установить перехватчик сообщений для главного окна. 2 //WSC_EDITPROC Установить перехватчик сообщений для всех окон редактирования. 3 //WSC_FRAMEPROC Установить перехватчик сообщений для всех вкладок режима MDI. lpFunction Функция с 4 параметрами, куда будут приходить сообщения. ... Фильтр сообщений. Будут приходить только указанные сообщения. Если не указан, будут приходить все сообщения. Возвращаемое значение Число. Дескриптор перехватчика. Пример: var oSys=AkelPad.SystemFunction(); var hSubClass; var nSelStart; if (hSubClass=AkelPad.WindowSubClass(2 /*WSC_EDITPROC*/, EditCallback, 258 /*WM_CHAR*/)) { //Message loop AkelPad.WindowGetMessage(); AkelPad.WindowUnsubClass(2 /*WSC_EDITPROC*/); } function EditCallback(hWnd, uMsg, wParam, lParam) { if (uMsg == 258 /*WM_CHAR*/) { if (String.fromCharCode(wParam) == "q") { AkelPad.MessageBox(0, "Key \"" + String.fromCharCode(wParam) + "\" is pressed. Exiting script...", "", 0); //Exit message loop oSys.Call("user32::PostQuitMessage", 0); } else { //First do default processing AkelPad.WindowNextProc(hSubClass, hWnd, uMsg, wParam, lParam); //After default processing we can select inserted character nSelStart=AkelPad.GetSelStart(); AkelPad.SetSel(nSelStart - 1, nSelStart); //We already do default processing, so skip it AkelPad.WindowNoNextProc(hSubClass); return 0; } } } AkelPad.WindowNextProc (+ActiveX) _________________________________ Послать сообщение следующей процедуре в цепи. WindowNextProc(hSubClass, hWnd, nMessage, wParam, lParam); Аргументы hSubClass Дескриптор перехватчика. hWnd Дескриптор окна. nMessage Сообщение. wParam Дополнительная информация. lParam Дополнительная информация. Возвращаемое значение Число. Результат возвращенный следующей процедурой. Пример: См. пример WindowSubClass. AkelPad.WindowNoNextProc (+ActiveX) ___________________________________ Предотвращает отсыл текущего сообщения следующей процедуре в цепи. WindowNoNextProc(hSubClass); Аргументы hSubClass Дескриптор перехватчика. Возвращаемое значение Ноль. Пример: См. пример WindowSubClass. AkelPad.WindowUnsubClass (+ActiveX) ___________________________________ Удалить перехватчик сообщений окна. WindowUnsubClass(hHandle); Аргументы hHandle Дескриптор окна или одно из следующих значений: 1 //WSC_MAINPROC Удалить перехватчик сообщений главного окна. 2 //WSC_EDITPROC Удалить перехватчик сообщений окон редактирования. 3 //WSC_FRAMEPROC Удалить перехватчик сообщений вкладок режима MDI. Возвращаемое значение Ноль. Пример: См. пример WindowSubClass. AkelPad.ThreadHook (+ActiveX) _____________________________ Установить хук для потока. ThreadHook(nId, lpFunction, nThreadId[, ...]); Аргументы nId См. первый параметр SetWindowsHookEx в MSDN. lpFunction Функция с 3 параметрами, куда будут приходить вызовы. nThreadId Идентификатор потока. Установка глобального хука не поддерживается. ... Фильтр сообщений. Будут приходить только указанные сообщения. Если не указан, будут приходить все сообщения. nId должен быть одним из следующих значений: WH_CALLWNDPROC, WH_CALLWNDPROCRET, WH_GETMESSAGE, WH_MSGFILTER, WH_SYSMSGFILTER. Возвращаемое значение Число. Дескриптор хука. Замечания Максимальное число работающих хуков не должно превышать 30-ти. Пример: var hMainWnd=AkelPad.GetMainWnd(); var oSys=AkelPad.SystemFunction(); var dwMainThreadID=oSys.Call("user32::GetWindowThreadProcessId", hMainWnd, 0); var hHook; if (hHook=AkelPad.ThreadHook(3 /*WH_GETMESSAGE*/, HookCallback, dwMainThreadID, 0x100 /*WM_KEYDOWN*/)) { //Message loop AkelPad.WindowGetMessage(); AkelPad.ThreadUnhook(hHook); } function HookCallback(nCode, wParam, lParam) { var uMsg=AkelPad.MemRead(_PtrAdd(lParam, _X64?8:4) /*offsetof(MSG, message)*/, 3 /*DT_DWORD*/); if (uMsg == 0x100 /*WM_KEYDOWN*/) { wParam=AkelPad.MemRead(_PtrAdd(lParam, _X64?16:8) /*offsetof(MSG, wParam)*/, 2 /*DT_QWORD*/); AkelPad.MessageBox(0, "Key \"" + String.fromCharCode(wParam) + "\" with code \"" + wParam + "\" is pressed.", "", 0); //Exit message loop oSys.Call("user32::PostQuitMessage", 0); } } AkelPad.ThreadUnhook (+ActiveX) _______________________________ Удалить хук из потока. ThreadUnhook(hHandle); Аргументы hHandle Дескриптор хука. Возвращаемое значение Ноль. Пример: См. пример ThreadHook. AkelPad.ScriptNoMutex _____________________ Изменить объекты синхронизации. ScriptNoMutex([nUnlockType]); Аргументы nUnlockType 0x01 //ULT_UNLOCKSCRIPTSQUEUE Разрешить одновременную работу других скриптов во время работы данного скрипта (по умолчанию). 0x02 //ULT_UNLOCKPROGRAMTHREAD Освободить поток программы от ожидания завершения скрипта. Только для внешнего вызова скрипта с кодом 2. 0x04 //ULT_LOCKMULTICOPY Запретить запуск нескольких копий скрипта. По умолчанию запуск нескольких копий разрешен. 0x08 //ULT_UNLOCKMULTICOPY Отменить запрет на запуск нескольких копий скрипта. 0x10 //ULT_LOCKSENDMESSAGE Вызовы AkelPad.SendMessage, AkelPad.Command блокируют поток скрипта (по умолчанию). 0x20 //ULT_UNLOCKSENDMESSAGE Вызовы AkelPad.SendMessage, AkelPad.Command не блокируют поток скрипта (медленнее). Возвращаемое значение Число. Измененные объекты синхронизации, см. nUnlockType. Пример: AkelPad.ScriptNoMutex(); AkelPad.ScriptExitCode ______________________ Установить код выхода из скрипта. Только для внешнего вызова скрипта с кодом 2 или 4. ScriptExitCode([nExitCode]); Аргументы nExitCode Код выхода из скрипта. Возвращаемое значение true успешно. false вызывающий поток вышел из процедуры внешнего вызова. Пример: AkelPad.ScriptExitCode(1); AkelPad.ScriptHandle (+ActiveX) _______________________________ Позволяет взаимодействовать с другими работающими скриптами. ScriptHandle(vData, nOperation); Аргументы vData Входящие данные. nOperation 1 //SH_FIRSTSCRIPT Получить первый скрипт в стеке. // vData: ноль. // Возвращаемое значение: дескриптор первого скрипта в стеке. 2 //SH_THISSCRIPT Получить дескриптор текущего скрипта в стеке. // vData: ноль. // Возвращаемое значение: дескриптор текущего скрипта в стеке. 3 //SH_FINDSCRIPT Найти дескриптор скрипта по его имени. // vData: имя скрипта. // Возвращаемое значение: дескриптор первого найденного работающего скрипта стеке. 10 //SH_GETEXECTYPE Получить код внешнего вызова скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: код внешнего вызова скрипта. 11 //SH_GETTHREADHANDLE Получить дескриптор потока скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: дескриптор потока скрипта. 12 //SH_GETTHREADID Получить идентификатор потока скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: идентификатор потока скрипта. 13 //SH_GETMESSAGELOOP Получить наличие цикла сообщений в потоке скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: true - присутствует, false - отсутствует. 14 //SH_GETLOCKMULTICOPY Блокировка запуска нескольких копий скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: true - присутствует, false - отсутствует. 15 //SH_GETLOCKSCRIPTSQUEUE Блокировка одновременной работы других скриптов во время работы данного скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: true - присутствует, false - отсутствует. 16 //SH_GETLOCKPROGRAMTHREAD Блокировка потока программы, ожидающего завершения скрипта (при внешнем вызове скрипта с кодом 2). // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: true - присутствует, false - отсутствует. 17 //SH_GETSERVICEWINDOW Получить дескриптор служебного окна потока скрипта. Автоматически создается при использовании методов WindowSubClass, ThreadHook и RegisterCallback. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: дескриптор служебного окна потока скрипта. 18 //SH_GETLOCKSENDMESSAGE Блокировка потока скрипта вызовами AkelPad.SendMessage, AkelPad.Command. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: true - присутствует, false - отсутствует. 20 //SH_GETBASENAME Получить имя скрипта без расширения. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: имя скрипта без расширения. 21 //SH_GETNAME Получить имя скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: имя скрипта. 22 //SH_GETFILE Получить файл скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: файл скрипта. 23 //SH_GETNCLUDE Получить файл подсоединяемого скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: файл подсоединяемого скрипта. 24 //SH_GETARGUMENTS Получить строку аргументов скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: строка аргументов скрипта. 31 //SH_NEXTSCRIPT Получить дескриптор следующего скрипта в стеке независимо от имени. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: дескриптор следующего скрипта в стеке независимо от имени. 32 //SH_NEXTSAMESCRIPT Получить дескриптор следующего скрипта в стеке с тем же именем. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: дескриптор следующего скрипта в стеке с тем же именем. 33 //SH_CLOSESCRIPT Выйти из цикла сообщений потока скрипта. // vData: дескриптор скрипта. Если ноль, то используется дескриптор текущего скрипта. // Возвращаемое значение: ноль. Возвращаемое значение Зависит от операции. Пример (запрет на изменение шрифта посредством колесика мыши и клавиши Ctrl): var hMainWnd=AkelPad.GetMainWnd(); var oSys=AkelPad.SystemFunction(); var hSubClass; var hScript; if ((hScript=AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/)) && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/)) { //Script is running, second call close it. AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/); } else if (hSubClass=AkelPad.WindowSubClass(2 /*WSC_EDITPROC*/, EditCallback, 0x020A /*WM_MOUSEWHEEL*/)) { //Allow other scripts running. AkelPad.ScriptNoMutex(); //Message loop. AkelPad.WindowGetMessage(); AkelPad.WindowUnsubClass(2 /*WSC_EDITPROC*/); } function EditCallback(hWnd, uMsg, wParam, lParam) { if (uMsg == 0x020A /*WM_MOUSEWHEEL*/) { if ((wParam & 0xffff) == 0x8 /*MK_CONTROL*/) { AkelPad.WindowNoNextProc(hSubClass); return 0; } } } AkelPad.ConnectObject (+ActiveX) ________________________________ Подсоединиться к событиям объекта. ConnectObject(oEventSource, pPrefix[, vIID]); Аргументы oEventSource Объект, к которому необходимо подсоединиться. pPrefix Префикс для функций, куда будут приходить события. vIID IID интерфейса событий. - vIID может быть строкой в формате "{00000000-0000-0000-0000-000000000000}". - vIID может быть указателем. Пример: var lpDIID_DWebBrowserEvents2=AkelPad.MemAlloc(16 /*sizeof(IID)*/); oSys.Call("ole32::IIDFromString", "{34A715A0-6587-11D0-924A-0020AFC7AC4D}", lpDIID_DWebBrowserEvents2); - Если vIID не указан, подсоединиться ко всем возможным интерфейсам объекта. Возвращаемое значение Число. Количество интерфейсов, к которым успешно удалось подключиться. Пример: var oIE=new ActiveXObject("InternetExplorer.Application"); var oSys=AkelPad.SystemFunction(); if (AkelPad.ConnectObject(oIE, "IE_", "{34A715A0-6587-11D0-924A-0020AFC7AC4D}" /*DIID_DWebBrowserEvents2*/)) { oIE.Visible=true; oIE.Navigate("http://akelpad.sourceforge.net/"); AkelPad.WindowGetMessage(); AkelPad.DisconnectObject(oIE); } oIE.Quit(); function IE_DocumentComplete(pDisp, URL) { AkelPad.MessageBox(oIE.HWND, URL, WScript.ScriptName, 0 /*MB_OK*/); oSys.Call("user32::PostQuitMessage", 0); } AkelPad.DisconnectObject (+ActiveX) ___________________________________ Отсоединиться от событий объекта. DisconnectObject(oEventSource); Аргументы oEventSource Объект, с которым произведено соединение. Возвращаемое значение Ноль. Пример: См. пример ConnectObject. AkelPad.ActiveXThis (+ActiveX) ______________________________ Передать корневой IDispatch плагину. Требуется некоторым методам для работы в режиме ActiveX (ConnectObject, ScriptHandle). ActiveXThis(this); Аргументы this Корневой IDispatch скрипта. Возвращаемое значение Ноль. Пример: См. раздел ActiveX. WScript.ScriptBaseName ______________________ Получить базовое имя скрипта. WScript.ScriptBaseName Возвращаемое значение Строка. Базовое имя скрипта. Пример: WScript.Echo(WScript.ScriptBaseName); _TCHAR (+ActiveX) _________________ Константа, определяющая окончание системных функций. Используется для метода AkelPad.SystemFunction().Call. _TCHAR Возвращаемое значение Строка. "A" - функции вызываются с окончанием на "A" (Windows 95/98/Me). "W" - функции вызываются с окончанием на "W" (Windows NT/2000/XP). Пример: //Как обеспечить поддержку юникода и не потерять совместимость с Win9x: var oSys=AkelPad.SystemFunction(); var lpBuffer; var pWinDir; if (lpBuffer=AkelPad.MemAlloc(256 * _TSIZE)) { oSys.Call("kernel32::GetWindowsDirectory" + _TCHAR, lpBuffer, 256); pWinDir=AkelPad.MemRead(lpBuffer, _TSTR); AkelPad.MemFree(lpBuffer); } vbTCHAR (+ActiveX) __________________ Тоже, что и _TCHAR. Используется для VBScript. _TSTR (+ActiveX) ________________ Константа, определяющая тип строки. Используется для методов MemCopy и MemRead. _TSTR Возвращаемое значение Число. 0 - DT_ANSI - однобайтовая строка (Windows 95/98/Me). 1 - DT_UNICODE - двухбайтовая строка (Windows NT/2000/XP). Пример: См. пример _TCHAR. vbTSTR (+ActiveX) _________________ Тоже, что и _TSTR. Используется для VBScript. _TSIZE (+ActiveX) _________________ Константа, определяющая размер символа в байтах. Используется для метода MemAlloc. _TSIZE Возвращаемое значение Число. 1 - sizeof(char) - один байт (Windows 95/98/Me). 2 - sizeof(wchar_t) - два байта (Windows NT/2000/XP). Пример: См. пример _TCHAR. vbTSIZE (+ActiveX) __________________ Тоже, что и _TSIZE. Используется для VBScript. _X64 (+ActiveX) _______________ Константа, определяющая битность программы - x86 или x64. _X64 Возвращаемое значение Число. 0 - версия x86. 1 - версия x64. Пример: if (_X64) WScript.Echo("x64 версия"); else WScript.Echo("x86 версия"); vbX64 (+ActiveX) ________________ Тоже, что и _X64. Используется для VBScript. _PtrAdd (+ActiveX) __________________ Добавить значение к указателю. _PtrAdd(lpPointer, nValue) Аргументы lpPointer Любой указатель. nValue Значение для добавления. Может быть отрицательным. Возвращаемое значение Число. Указатель. Пример: См. пример ThreadHook. vbPtrAdd (+ActiveX) ___________________ Тоже, что и _PtrAdd. Используется для VBScript. _PtrMath (+ActiveX) ___________________ Выполнить математическое действие над указателями. _PtrMath(lpPointer1, pSign, lpPointer2) Аргументы lpPointer1 Первый указатель. pSign Одно из следующих: "+", "-", "*", "/", "%", "&", "|", "^", ">", "<", "^", "==", "!=", ">=", "<=", "<<", ">>" lpPointer2 Второй указатель. Возвращаемое значение Число. Указатель. Пример: См. пример WindowRegisterClass (VBScript). vbPtrMath (+ActiveX) ____________________ Тоже, что и _PtrMath. Используется для VBScript. *** ActiveX *** Scripts.dll может быть использован в сторонних приложениях после регистрации библиотеки в системе. - Регистрация версии x86: regsvr32.exe Scripts.dll - Регистрация версии x64: "%SystemRoot%\System32\regsvr32.exe" Scripts.dll Пример использования: if (typeof AkelPad == "undefined") { AkelPad=new ActiveXObject("AkelPad.Document"); AkelPad.ActiveXThis(this); _TCHAR=AkelPad.Constants._TCHAR; _TSTR=AkelPad.Constants._TSTR; _TSIZE=AkelPad.Constants._TSIZE; _X64=AkelPad.Constants._X64; _PtrAdd=function(n1, n2) {return AkelPad.Global._PtrAdd(n1, n2);}; } var oSys=AkelPad.SystemFunction(); var lpBuffer; var pWinDir=""; if (lpBuffer=AkelPad.MemAlloc(256 * _TSIZE)) { oSys.Call("kernel32::GetWindowsDirectory" + _TCHAR, lpBuffer, 256); pWinDir=AkelPad.MemRead(lpBuffer, _TSTR); AkelPad.MemFree(lpBuffer); } WScript.Echo(pWinDir);