*****************************************************************
***                 Scripts AkelPad plugin v18.7              ***
*****************************************************************

2007-2017 Шенгальц Александр 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);
