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