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