Code: Select all
if (typeof AkelPad == "undefined")
{
try
{
AkelPad = new ActiveXObject("AkelPad.Document");
}
catch (oError)
{
WScript.Echo("You need register Scripts.dll");
WScript.Quit();
}
}
var WS_CAPTION = 0x00C00000;
var WS_CHILD = 0x40000000;
var WS_MINIMIZEBOX = 0x00020000;
var WS_OVERLAPPED = 0x00000000;
var WS_POPUP = 0x80000000;
var WS_SYSMENU = 0x00080000;
var WS_TABSTOP = 0x00010000;
var WS_VISIBLE = 0x10000000;
var DS_SETFONT = 0x0040;
var BS_AUTOCHECKBOX = 0x0003;
var BS_DEFPUSHBUTTON = 0x0001;
var oSys = AkelPad.SystemFunction();
var nCounter = 0;
var IDCANCEL = 2;
var IDNEW = 1000;
var IDCLOSE = 1001;
var IDCHECK1 = 1002;
var IDCHECK2 = 1003;
var IDCHECK3 = 1004;
var IDCHECK4 = 1005;
var IDCHECK5 = 1006;
var IDCHECK6 = 1007;
var IDCHECK7 = 1008;
var IDCHECK8 = 1009;
var IDCHECK9 = 1010;
var IDCHECK10 = 1011;
var IDCHECK11 = 1012;
var IDCHECK12 = 1013;
var IDCHECK13 = 1014;
var IDCHECK14 = 1015;
var IDCHECK15 = 1016;
CreateNewDialog(0);
function CreateNewDialog(hParent)
{
try
{
oSys.RegisterCallback(DialogCallback);
}
catch (oError)
{
return;
WScript.Echo("Unable to register callback function.");
}
var aDlg = [];
var lpTemp;
var hDlg;
var i;
aDlg.Title = "Dialog box " + ++nCounter;
aDlg.Style = WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
aDlg.X = 5;
aDlg.Y = 5;
aDlg.W = 125;
aDlg.H = 208;
aDlg.CtlFirst = IDNEW;
aDlg.CtlStyle = WS_VISIBLE | WS_TABSTOP;
aDlg.CtlFontN = "MS Shell Dlg";
aDlg[IDNEW] = {X: 5, Y: 190, W: 55, H: 14, Title: "&New dialog", Style: BS_DEFPUSHBUTTON};
aDlg[IDCLOSE] = {X: 65, Y: 190, W: 55, H: 14, Title: "Close"};
for (i = 0; i < 15; ++i)
aDlg[IDCHECK1 + i] = {X: 36, Y: 5 + 12 * i, W: 60, H: 10, Title: "CheckBox" + (i + 1), Style: BS_AUTOCHECKBOX};
lpTemp = GetDialogTemplate(aDlg);
hDlg = oSys.Call("User32::CreateDialogIndirectParamW",
AkelPad.GetInstanceDll(), //hInstance
lpTemp, //lpTemplate
hParent, //hWndParent
DialogCallback, //lpDialogFunc
0); //lParamInit
AkelPad.MemFree(lpTemp);
if (hDlg)
{
AkelPad.WindowRegisterDialog(hDlg);
if (nCounter == 1)
AkelPad.WindowGetMessage();
}
else
{
--nCounter;
oSys.UnregisterCallback(DialogCallback);
}
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 273 /*WM_COMMAND*/)
{
var nLowParam = wParam & 0xFFFF;
if (nLowParam == IDNEW)
CreateNewDialog(hWnd);
else if ((nLowParam == IDCANCEL) || (nLowParam == IDCLOSE))
oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 16 /*WM_CLOSE*/)
oSys.Call("User32::DestroyWindow", hWnd);
else if (uMsg == 2 /*WM_DESTROY*/)
{
AkelPad.WindowUnregisterDialog(hWnd);
oSys.UnregisterCallback(DialogCallback);
if (nCounter-- == 1)
oSys.Call("User32::PostQuitMessage", 0);
}
return 0;
}
}
function GetDialogTemplate(aDlg)
{
var nCtlCount = 0;
var sTitle = aDlg.Title || "";
var nCtlFontS = aDlg.CtlFontS || 8;
var nTempLen = 30 + (sTitle.length + 1) * 2;
var lpTemp;
var lpItem;
var sCtlClass;
var sCtlTitle;
var i;
if (aDlg.Style & WS_CHILD) aDlg.Style ^= WS_CHILD;
if (aDlg.CtlFontN)
{
aDlg.Style |= DS_SETFONT;
nTempLen += 6 + (aDlg.CtlFontN.length + 1) * 2;
}
else if (aDlg.Style & DS_SETFONT)
aDlg.Style ^= DS_SETFONT;
nTempLen += (4 - nTempLen % 4) % 4; //align to DWORD
for (i = aDlg.CtlFirst; i < aDlg.length; ++i)
{
if (aDlg[i])
{
sCtlClass = aDlg[i].Class || aDlg.CtlClass || "BUTTON";
sCtlTitle = aDlg[i].Title || "";
aDlg[i].Style |= aDlg.CtlStyle | WS_CHILD;
if (aDlg[i].Style & WS_POPUP) aDlg[i].Style ^= WS_POPUP;
nTempLen += 26 + (sCtlClass.length + 1) * 2 + (sCtlTitle.length + 1) * 2;
nTempLen += (4 - nTempLen % 4) % 4; //align to DWORD
++nCtlCount;
}
}
lpTemp = AkelPad.MemAlloc(nTempLen);
lpItem = lpTemp;
//fill DLGTEMPLATEEX
AkelPad.MemCopy(lpItem, 1, 4 /*DT_WORD*/); //dlgVer
AkelPad.MemCopy(lpItem + 2, 0xFFFF, 4 /*DT_WORD*/); //signature
AkelPad.MemCopy(lpItem + 8, aDlg.ExStyle, 3 /*DT_DWORD*/); //exStyle
AkelPad.MemCopy(lpItem + 12, aDlg.Style, 3 /*DT_DWORD*/); //style
AkelPad.MemCopy(lpItem + 16, nCtlCount, 4 /*DT_WORD*/); //cDlgItems
AkelPad.MemCopy(lpItem + 18, aDlg.X, 4 /*DT_WORD*/); //x
AkelPad.MemCopy(lpItem + 20, aDlg.Y, 4 /*DT_WORD*/); //y
AkelPad.MemCopy(lpItem + 22, Math.abs(aDlg.W), 4 /*DT_WORD*/); //cx
AkelPad.MemCopy(lpItem + 24, Math.abs(aDlg.H), 4 /*DT_WORD*/); //cy
AkelPad.MemCopy(lpItem + 30, sTitle, 1 /*DT_UNICODE*/); //title
lpItem += 30 + (sTitle.length + 1) * 2;
if (aDlg.CtlFontN)
{
AkelPad.MemCopy(lpItem, nCtlFontS, 4 /*DT_WORD*/); //pointsize
AkelPad.MemCopy(lpItem + 4, aDlg.CtlFontI, 5 /*DT_BYTE*/); //italic
AkelPad.MemCopy(lpItem + 5, 1, 5 /*DT_BYTE*/); //charset=DEFAULT_CHARSET
AkelPad.MemCopy(lpItem + 6, aDlg.CtlFontN, 1 /*DT_UNICODE*/); //typeface
lpItem += 6 + (aDlg.CtlFontN.length + 1) * 2;
}
lpItem += (4 - lpItem % 4) % 4; //align to DWORD
//fill DLGITEMTEMPLATEEX
for (i = aDlg.CtlFirst; i < aDlg.length; ++i)
{
if (aDlg[i])
{
sCtlClass = aDlg[i].Class || aDlg.CtlClass || "BUTTON";
sCtlTitle = aDlg[i].Title || "";
AkelPad.MemCopy(lpItem + 4, aDlg[i].ExStyle, 3 /*DT_DWORD*/); //exStyle
AkelPad.MemCopy(lpItem + 8, aDlg[i].Style, 3 /*DT_DWORD*/); //style
AkelPad.MemCopy(lpItem + 12, aDlg[i].X, 4 /*DT_WORD*/); //x
AkelPad.MemCopy(lpItem + 14, aDlg[i].Y, 4 /*DT_WORD*/); //y
AkelPad.MemCopy(lpItem + 16, Math.abs(aDlg[i].W), 4 /*DT_WORD*/); //cx
AkelPad.MemCopy(lpItem + 18, Math.abs(aDlg[i].H), 4 /*DT_WORD*/); //cy
AkelPad.MemCopy(lpItem + 20, i, 3 /*DT_DWORD*/); //id
AkelPad.MemCopy(lpItem + 24, sCtlClass, 1 /*DT_UNICODE*/); //windowClass
lpItem += 24 + (sCtlClass.length + 1) * 2;
AkelPad.MemCopy(lpItem, sCtlTitle, 1 /*DT_UNICODE*/); //title
lpItem += (sCtlTitle.length + 1) * 2 + 2;
lpItem += (4 - lpItem % 4) % 4; //align to DWORD
}
}
return lpTemp;
}