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