    *****************************************************************
    ***                 Scripts AkelPad plugin v18.6              ***
    *****************************************************************

    2007-2016 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)

    *** 描述 ***

    脚本插件基于 Windows 脚本宿主 (WSH) 引擎，因此您可以使用各种各样的 Windows 组件对象模型 (COM) 的对象。
    例如，您可以使用 RegExp 对象来执行正则表达式搜索，
    使用 FileSystemObject 对象来操作文件，创建快捷方式，
    使用 WshShell 对象来操作 Windows 注册表，
    或使用 WshNetwork 对象来运行网络功能。
    此外，您可以创建和执行利用一个支持自动化的外部应用程序 (如 Word 和 Excel) 脚本。
    插件的源码基于 Jeff Glatt 的 "COM in C"。

    *** 包括脚本 ***

    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
          请参阅方法 AkelPad.ScriptHandle 中的参数 nOperation。除了 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"
          带参数的脚本插件方法。
        *RESULT
          调用结果。
      例:
        "查找下一段落" Call("Scripts::Main", 7, `AkelPad.TextFind(0, "(?<=\n\n)(?!\n)", 0x80001 /*FRF_DOWN|FRF_REGEXP*/)`)

    *** 脚本中的服务信息 ***

    在脚本开头的注释中可以设置将在脚本列表(可以用鼠标右键单击列表标题来启用相应的列)中出现的服务信息，同样应用于 AkelUpdater 中的升级。

    网站:
    // http://akelpad.sourceforge.net/...

    版本:
    // Version: ...

    作者:
    // Author: ...

    说明 (变量 1):
    //// 使用正则表达式来搜索和替换。

    说明 (变量 2):
    // *** 使用正则表达式来搜索和替换。 ***

    用指定语言说明 (变量 3):
    // Description(1033): Search and replace using regular expressions.
    // Description(2052): 使用正则表达式来搜索和替换。

    语言标识符列表 (Microsoft 分配的本地 ID):
    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
    _________________

    获取 AkelPad 语言 ID。

      GetLangId([nType]);

    参数
      nType
        0  //LANGID_FULL     完整的语言标识符。这个值是一个主语言标识符和子语言标识符的组合（默认）。
        1  //LANGID_PRIMARY  主语言标识符。
        2  //LANGID_SUB      子语言标识符。

    返回值
      数值。AkelPad 语言 ID。

    例:
      var nLangID=AkelPad.GetLangId(1 /*LANGID_PRIMARY*/);

      if (nLangID == 0x19) //LANG_RUSSIAN
        WScript.Echo("Russian");
      else
        WScript.Echo("Other");

    AkelPad.IsOldWindows (+ActiveX)
    _______________________________

    非-Unicode Windows。

      IsOldWindows();

    返回值
      true   非-Unicode (Windows 95/98/Me)。
      false  Unicode (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 窗口 (AkelPad v4.x.x 或更高版本)。

    例:
      var nAkelEdit=AkelPad.IsAkelEdit();

    AkelPad.IsMDI
    _____________

    AkelPad 处于 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
        更改的设置类型。请参阅 AkelDLL.h 中的 FIS_* 标记说明。
      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* 时指定。

    返回值
      数值。返回值是所按下按钮的 ID。

    例 (标准对话框):
      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
        编辑窗口的句柄。如果为 0 就使用活动的编辑窗口的句柄。
      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           使用转义符序列搜索。
        0x01000000  //FRF_ALLFILES            在所有打开的 MDI 文档中搜索 (用法：FRF_DOWN|FRF_ALLFILES or FRF_DOWN|FRF_BEGINNING|FRF_ALLFILES)。
        0x08000000  //FRF_CYCLESEARCH         循环搜索。
        0x10000000  //FRF_CYCLESEARCHPROMPT   循环搜索的提示。
        0x80000000  //FRF_TEST                仅供测试。未选定文本。

    返回值
      数值。下一个匹配的字符的位置。
      如果没有匹配，返回值为 -1。
      如果正则表达式有语法错误 (带 FRF_REGEXP 标记)，返回值为 (-100 - PatternOffset)。
      示例，查找内容为 "ab[c"，其中第三个符号有语法错误，返回值为 -102。

    例:
      AkelPad.TextFind(0, "MySearchString", 0x00200001 /*FRF_DOWN|FRF_BEGINNING*/);

    AkelPad.TextReplace
    ___________________

    查找和替换文本。

      TextReplace(hHandle, pFindIt, pReplaceWith, nFindFlags, nReplaceFlags);

    参数
      hHandle
        编辑窗口的句柄。如果为 0 就使用当前编辑窗口句柄。
      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           使用转义符序列搜索。
        0x01000000  //FRF_ALLFILES            在所有打开的 MDI 文档中搜索 (用法：FRF_DOWN|FRF_ALLFILES or 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 - PatternOffset)。
      示例，查找内容为 "ab[c"，其中第三个符号有语法错误，返回值为 -102。

    例:
      AkelPad.TextReplace(0, "MySearchString", "MyReplaceText", 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  启动程序之后立即返回，自动返回值 0 (默认值)。
        1  等待直到程序完成并返回任何程序返回的错误代码。
        2  等待直到指定的进程正在等待用户的输入，自动返回值 0。
      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(1252, 437);

    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() 方法所执行时返回 Include 文件名，否则返回 ""。

    例:
      WScript.Echo("" + AkelPad.IsInclude());

    AkelPad.OpenFile
    ________________

    打开文件。

      OpenFile(pFile[, nFlags][, nCodePage][, bBOM]);

    参数
      pFile
        要打开的文件。
      nFlags
        0x001  //OD_ADT_BINARY_ERROR    检测文件是否是二进制文件。
        0x002  //OD_ADT_REG_CODEPAGE    如果在注册表中找到最近打开的代码页，那么它将会带 OD_ADT_DETECT_BOM
               //                       标记地被使用，如果未找到，那么下一个标记将会使用
               //                       OD_ADT_DETECT_CODEPAGE|OD_ADT_DETECT_BOM。
        0x004  //OD_ADT_DETECT_CODEPAGE 检测代码页。
        0x008  //OD_ADT_DETECT_BOM      检测 BOM 标志。
        0x010  //OD_ADT_NOMESSAGES      如果自动检测出错无消息提示。
        0x020  //OD_ADT_ONLYBOM         仅当出现 BOM 标志时检测代码页，否则使用默认代码页。
        0x100  //OD_REOPEN              不创建新的 MDI 窗口，使用已退出那一个。
        0x200  //OD_NOSCROLL            不恢复滚动条位置。
        0x400  //OD_MULTIFILE           队列中有更多的文档。使用 MB_YESNOCANCEL 代替 MB_OKCANCEL。
        0x800  //OD_NOUPDATE            不更新文件信息。
             //默认值是 0xD            (OD_ADT_BINARY_ERROR|OD_ADT_DETECT_CODEPAGE|OD_ADT_DETECT_BOM)。
      nCodePage
        文件代码页，若 (nFlags & OD_ADT_DETECT_CODEPAGE) 时被忽略
      bBOM
        文件 BOM，若 (nFlags & OD_ADT_DETECT_BOM) 时被忽略

    返回值
       0  //EOD_SUCCESS          成功。
      -1  //EOD_ADT_OPEN         自动检测代码页，无法打开文件。
      -2  //EOD_ADT_ALLOC        自动检测代码页，无法分配缓存。
      -3  //EOD_ADT_READ         自动检测代码页，读取文件出错。
     -11  //EOD_OPEN             无法打开文件。
     -13  //EOD_WINDOW_EXIST     文件已经打开。
     -14  //EOD_CODEPAGE_ERROR   无法使用指定代码页。
     -15  //EOD_STOP             从 AKDN_OPENDOCUMENT_START 位置停止。
     -16  //EOD_STREAMIN         在 EM_STREAMIN 中出错。
     -17  //EOD_DOCUMENTS_LIMIT  到达了 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_BINARY_ERROR     检测文件是否是二进制文件。
        0x02  //ADT_REG_CODEPAGE     如果在注册表中找到最近打开的代码页，那么它将会带 ADT_DETECT_BOM
              //                     标记地被使用，如果未找到，那么下一个标记将会使用
              //                     ADT_DETECT_CODEPAGE|ADT_DETECT_BOM。
        0x04  //ADT_DETECT_CODEPAGE  检测代码页。
        0x08  //ADT_DETECT_BOM       检测 BOM 标志。
        0x10  //ADT_NOMESSAGES       如果自动检测发现错误也不提示。
        0x20  //ADT_ONLYBOM          仅当出现 BOM 标志时检测代码页，否则使用默认代码页。
              //默认值是 0xD         (ADT_BINARY_ERROR|ADT_DETECT_CODEPAGE|ADT_DETECT_BOM).
      nCodePage
        文件代码页，若 (nFlags & ADT_DETECT_CODEPAGE) 时被忽略。
      bBOM
        文件 BOM，若 (nFlags & ADT_DETECT_BOM) 时被忽略。
      nBytesMax
        读取文件开始的指定字节数。如果为 -1，就读取整个文件 (默认值)。

    返回值
      字符串。文件的内容。

    例:
      var pText=AkelPad.ReadFile("C:\\MyFile.txt");

    AkelPad.WriteFile
    _________________

    写入文件内容。

      WriteFile(vFile, pContent, nContentLen, nCodePage, bBOM[, nFlags]);

    参数
      vFile
        要写入的文件，为字符串或为文件句柄。
      pContent
        要写入的内容。
      nContentLen
        内容长度。如果为 -1，自动计算长度。
      nCodePage
        写入代码页。
      bBOM
        文件字节顺序标记。
      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_CODEPAGE_ERROR  无法使用指定代码页。
      -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
        函数名称的字符串格式是 "Dll::Function" 或数字格式的函数地址。
      ...
        函数参数必须是整数、指针或字符串。
        字符串参数: 在 Windows 95/98/Me - Ansi 字符串，
                    在 Windows NT/2000/XP - Unicode 字符串。

    返回值
      数值。调用结果。

    例 (新语法):
      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       复制 QWORD (x64) 或 DWORD (x86) 数字到内存。
        3  //DT_DWORD       复制 DWORD 数字到内存。
        4  //DT_WORD        复制 WORD 数字到内存。
        5  //DT_BYTE        复制 BYTE 数字到内存。
      nLength
        字符串长度。如果值为 -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       从内存读取 QWORD (x64) 或 DWORD (x86) 数字。
        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
        变量。

    返回值
      数值。 变量 (VARIANT) 的类型 (VARTYPE)。
           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.VarDispatch (+ActiveX)
    ______________________________

    获取一个指针的 IDispatch 对象。

      VarDispatch(lpPointer);

    参数
      lpPointer
        指针指向 IDispatch 对象。

    返回值
      对象。IDispatch 对象。

    例:
      var oIE=new ActiveXObject("InternetExplorer.Application");
      //IDispatch -> pointer
      var nIE=_PtrAdd(oIE, 0);
      //Pointer -> IDispatch
      var oReturnIE=AkelPad.VarDispatch(nIE);

    AkelPad.GetArgLine
    __________________

    检索参数行。

      GetArgLine([bNoEncloseQuotes]);

    参数
      bNoEncloseQuotes
        true   排除括引号(by default)。
        false  保留括引号。

    返回值
      字符串。参数行。

    例:
      var pArgLine;

      if (pArgLine=AkelPad.GetArgLine(0))
        WScript.Echo(pArgLine);

    AkelPad.GetArgValue
    ___________________

    按名称检索参数的值。

      GetArgValue(pArgName, vDefault);

    参数
      pArgName
        参数名称。
      vDefault
        默认值。如果找不到指定的参数就使用该值。

    返回值
      参数返回值。从默认值继承类型。

    例:
      //Script was invoked as follows:
      //Call("Scripts::Main", 1, "MyScript.js", `-ArgName1=0.01 -ArgName2="Value2" /ArgName3=0x10`)

      //Get values 0.01, Value2, 0x10 by names 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 - 被忽略。

    返回值
      数字。设置句柄。

    例:
      请参阅读取、写入和删除示例。

    AkelPad.ScriptSettings().Read
    _____________________________

    读取选项。

      Read(vOptionName, nType[, vDefault]);

    参数
      vOptionName
        字符串时为选项名称，数字时为索引。
      nType
        1   //PO_DWORD         读取 32-bit 数字 (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   读取 32-bit 数字 (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  失败。

    例:
      请参阅读取、写入和删除示例。

    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;

      //打开“查找”对话框
      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);

      //创建测试按钮
      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
      //设置文本和字体
      SetWindowFontAndText(hWndTestButton, hGuiFont, "Test");

      //子类对话框
      if (AkelPad.WindowSubClass(hWndModeless, DialogCallback, 273 /*WM_COMMAND*/, 2 /*WM_DESTROY*/))
      {
        //在消息循环中注册对话框
        AkelPad.WindowRegisterDialog(hWndModeless);

        //消息循环
        AkelPad.WindowGetMessage();

        //注销和取消子类
        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
        {
          //退出消息循环
          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
        扩展的窗口样式。请参阅 MSDN 的 CreateWindowEx 使用说明。
      pClassName
        使用 AkelPad.WindowRegisterClass 登记的类名。
      pTitle
        对话框标题。
      nStyle
        窗口样式。请参阅 MSDN 的 CreateWindowEx 使用说明。
      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
        扩展的窗口样式。请参阅 MSDN 的 CreateWindowEx 使用说明。
      pClassName1
        类名，例如："BUTTON"。请参阅 MSDN 的 CreateWindowEx 使用说明。
      pTitle1
        控件文本。
      nStyle1
        控件样式。请参阅 MSDN 的 CreateWindowEx 使用说明。
      x1
        控件在客户端上的水平坐标位置。
      y1
        控件在客户端上的垂直坐标位置。
      nWidth1
        控件宽度。
      nHeight1
        控件高度。
      nId1
        控件标识符。
      lParam1
        创建数据。第一个字表示的是创建数据以字节为单位的大小(包括字的大小)。
        控件接收指向在 WM_CREATE 消息的 lParam 参数的这个数据的指针。如果为 零，就不使用 (默认值)。
      "|"
        表示控件参数的结束。
      ...
        下一控件的参数。

    返回值
      如果 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_KEYUP, WM_CHAR, WM_DEADCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_SYSCHAR, WM_SYSDEADCHAR, WM_UNICHAR)。
        0x4  //WGM_KEYDOWNUP 仅从子窗口发送 WM_KEYDOWN、WM_KEYUP 消息到对话框。
             //Default is 0x0.
             //默认值为 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
        请参考 MSDN 中的 SetWindowsHookEx 的第一个参数。
      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(lParam + (_X64?8:4) /*offsetof(MSG, message)*/, 3 /*DT_DWORD*/);

        if (uMsg == 0x100 /*WM_KEYDOWN*/)
        {
          wParam=AkelPad.MemRead(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)。

    例:
      //提供支持 Unicode 并且保持对 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 - ansi 字符串 (Windows 95/98/Me)。
            1 - DT_UNICODE - unicode 字符串 (Windows NT/2000/XP)。

    例:
      参考 _TCHAR 的示例。

    vbTSTR (+ActiveX)
    _________________

    和 _TSTR 相同。用于 VBScript。

    _TSIZE (+ActiveX)
    _________________

    确定符号大小的字节数的常量。用于 MemAlloc 方法。

      _TSIZE

    返回值
      数字。1 - sizeof(char) - 1 字节 (Windows 95/98/Me).
              2 - sizeof(wchar_t) - 2 字节 (Windows NT/2000/XP).

    例:
      参考 _TCHAR 的示例。

    vbTSIZE (+ActiveX)
    __________________

    和 _TSIZE 相同。用于 VBScript。

    _X64 (+ActiveX)
    _______________

    确定程序位类型的常量 - x86 或 x64。

      _X64

    返回值
      数值。0 - x86 版本。
            1 - x64 版本。

    例:
      if (_X64)
        WScript.Echo("x64 version");
      else
        WScript.Echo("x86 version");

    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);