Code: Select all
var oSys = AkelPad.SystemFunction();
WScript.Echo(DialogBoxIndirect(AkelPad.GetMainWnd(), "Dialog box", "OK"));
function DialogBoxIndirect(hWndParent, sCaption, sButton)
{
var DT_UNICODE = 1;
var DT_DWORD = 3;
var DT_WORD = 4;
var hInstanceDLL = AkelPad.GetInstanceDll();
var lpCallback = oSys.RegisterCallback("DialogBoxIndirectCallback");
var lpTemp = AkelPad.MemAlloc(1024);
var lpItem;
var nRetVal;
AkelPad.MemCopy(lpTemp, 0x90C80000, DT_DWORD); //style (WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU)
AkelPad.MemCopy(lpTemp + 4, 0x00000000, DT_DWORD); //dwExtendedStyle
AkelPad.MemCopy(lpTemp + 8, 1, DT_WORD); //cdit
AkelPad.MemCopy(lpTemp + 10, 200, DT_WORD); //x
AkelPad.MemCopy(lpTemp + 12, 100, DT_WORD); //y
AkelPad.MemCopy(lpTemp + 14, 300, DT_WORD); //cx
AkelPad.MemCopy(lpTemp + 16, 150, DT_WORD); //cy
AkelPad.MemCopy(lpTemp + 18, 0, DT_WORD); //menu (no menu)
AkelPad.MemCopy(lpTemp + 20, 0, DT_WORD); //class (default)
AkelPad.MemCopy(lpTemp + 22, sCaption, DT_UNICODE); //title
lpItem = lpTemp + 22 + (sCaption.length + 1) * 2;
AkelPad.MemCopy(lpItem, 0x50010000, DT_DWORD); //style (WS_CHILD|WS_VISIBLE|WS_TABSTOP)
AkelPad.MemCopy(lpItem + 4, 0x00000000, DT_DWORD); //dwExtendedStyle
AkelPad.MemCopy(lpItem + 8, 30, DT_WORD); //x
AkelPad.MemCopy(lpItem + 10, 30, DT_WORD); //y
AkelPad.MemCopy(lpItem + 12, 80, DT_WORD); //cx
AkelPad.MemCopy(lpItem + 14, 20, DT_WORD); //cy
AkelPad.MemCopy(lpItem + 16, 3001, DT_WORD); //id
AkelPad.MemCopy(lpItem + 18, 0xFFFF, DT_WORD); //class
AkelPad.MemCopy(lpItem + 20, 0x0080, DT_WORD); //class ("Button")
AkelPad.MemCopy(lpItem + 22, sButton, DT_UNICODE); //title
nRetVal = oSys.Call("user32::DialogBoxIndirect" + _TCHAR, hInstanceDLL, lpTemp, hWndParent, lpCallback);
oSys.UnregisterCallback(lpCallback);
AkelPad.MemFree(lpTemp);
return nRetVal;
}
function DialogBoxIndirectCallback(hWnd, uMsg, wParam, lParam)
{
switch (uMsg)
{
case 256 : //WM_KEYDOWN
if (wParam == 13 /*VK_RETURN*/)
{
oSys.Call("user32::EndDialog", hWnd, 1);
return 1;
}
else if (wParam == 27 /*VK_ESCAPE*/)
{
oSys.Call("user32::EndDialog", hWnd, 0);
return 1;
}
case 273 : //WM_COMMAND
if ((wParam & 0xFFFF) == 3001)
{
oSys.Call("user32::EndDialog", hWnd, 1);
return 1;
}
}
return 0;
}