// AZJIO
var pEditFile = AkelPad.GetEditFile(0);
var pFileExt  = AkelPad.GetFilePath(pEditFile, 4 /*CPF_FILEEXT*/);
switch (pFileExt.toLowerCase()) {
  case "js":
    pFileName = AkelPad.GetFilePath(pEditFile, 2 /*CPF_FILENAME*/)
    if (pFileName !== WScript.ScriptName) // самого себя не запускаем иначе это бесконечный цикл запусков
      AkelPad.Call("Scripts::Main", 1, pFileName);
    break;
  default:
    Shell32_ShellExecuteEx(pEditFile)
    break;
};


function Shell32_ShellExecuteEx(sFile)
{
  var nInfoSize = _X64 ? 112 : 60; //sizeof(SHELLEXECUTEINFO)
  var lpInfo    = AkelPad.MemAlloc(nInfoSize);
  var lpFile    = AkelPad.MemAlloc((sFile.length + 1) * _TSIZE);

  AkelPad.MemCopy(lpFile, sFile, _TSTR);

  AkelPad.MemCopy(lpInfo, nInfoSize, 3 /*DT_DWORD*/); //cbSize
  AkelPad.MemCopy(_PtrAdd(lpInfo, 4), 0x00000040 /*SEE_MASK_NOCLOSEPROCESS*/, 3 /*DT_DWORD*/); //fMask
  AkelPad.MemCopy(_PtrAdd(lpInfo, _X64 ? 24 : 16), lpFile, 2 /*DT_QWORD*/); //lpFile
  AkelPad.MemCopy(_PtrAdd(lpInfo, _X64 ? 48 : 28), 1 /*SW_SHOWNORMAL*/, 3 /*DT_DWORD*/); //nShow

  AkelPad.SystemFunction().Call("Shell32::ShellExecuteEx" + _TCHAR, lpInfo)

  AkelPad.MemFree(lpInfo);
  AkelPad.MemFree(lpFile);
}