Advertisement
Guest User

AkelPadRestart.js modified

a guest
Nov 12th, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // http://akelpad.sourceforge.net/forum/viewtopic.php?p=24839#24839
  2. // Version: 2014-05-25 / 2017-11-11 (yzh's mod)
  3. // Author: KDJ
  4. //
  5. // *** AkelPad restart without additional tools ***
  6. //
  7. // Usage:
  8. //   Call("Scripts::Main", 1, "AkelPadRestart.js")
  9. //
  10. // Дополнительный вариант использования:
  11. //   Call("Scripts::Main", 1, "AkelPadRestart.js", `-bitRestart -AkelPad.exe -AkelPad64.exe`)
  12. //     -bitRestart    = перезагрузка из одной разрядности в другую (x86 <> x64)
  13. //     -AkelPad.exe   = имя файла x86
  14. //     -AkelPad64.exe = имя файла x64
  15. //     количество параметров и их последовательность определены строго
  16.  
  17. // yzh's mod begin
  18. if (WScript.Arguments.length == 3 && WScript.Arguments(0).substr(1) == 'bitRestart')
  19. {
  20.   var pExeName86  = WScript.Arguments(1).substr(1);
  21.   var pExeName64  = WScript.Arguments(2).substr(1);
  22. }
  23. // yzh's mod end
  24.  
  25. if (typeof AkelPad == "object")
  26. {
  27.   if (WScript.Arguments.length != 2)
  28.     CloseAkelPad();
  29.   else
  30.     OpenFiles(WScript.Arguments(0), parseInt(WScript.Arguments(1)));
  31. }
  32. else if (WScript.Arguments.length == 4)
  33. {
  34.   RunAkelPad(WScript.Arguments(0), WScript.Arguments(1), parseInt(WScript.Arguments(2)), parseInt(WScript.Arguments(3)));
  35. }
  36.  
  37. function CloseAkelPad()
  38. {
  39.   var oFSO        = new ActiveXObject("Scripting.FileSystemObject");
  40.   var sWinDir     = new ActiveXObject("WScript.Shell").ExpandEnvironmentStrings("%WinDir%");
  41.   var sWscriptExe = sWinDir + "\\Sysnative\\wscript.exe";
  42.   var hMainWnd    = AkelPad.GetMainWnd();
  43.   var nMDI        = AkelPad.IsMDI();
  44.   var nPID        = AkelPad.SystemFunction().Call("Kernel32::GetCurrentProcessId");
  45.   var MAX_PATH    = 260;
  46.   var lpBuffer    = AkelPad.MemAlloc(MAX_PATH * _TSIZE);
  47.   var sAkelExe;
  48.   var nTabs;
  49.   var i;
  50.  
  51.   GetLangStrings();
  52.  
  53.   //on Win7 x64 no file %WinDir%\SysWOW64\qprocess.exe, therefore if AkelPd is 32bit, we run wscript.exe x64
  54.   if (! oFSO.FileExists(sWscriptExe))
  55.     sWscriptExe = sWinDir + "\\System32\\wscript.exe";
  56.  
  57.   AkelPad.SystemFunction().Call("Kernel32::GetModuleFileName" + _TCHAR, 0, lpBuffer, MAX_PATH);
  58.   sAkelExe = AkelPad.MemRead(lpBuffer, _TSTR)
  59.   AkelPad.MemFree(lpBuffer);
  60.  
  61.   // yzh's mod begin
  62.   if (pExeName86 != undefined)
  63.   {
  64.     if (_X64 == 1)
  65.       sAkelExe = sAkelExe.replace(pExeName64, pExeName86);
  66.     else
  67.     {
  68.       var oArch = new ActiveXObject('WScript.Shell').Environment('System')('PROCESSOR_ARCHITECTURE');
  69.       if (oArch.substr(oArch.length-2) == '64')
  70.         sAkelExe = sAkelExe.replace(pExeName86, pExeName64);
  71.       else
  72.       {
  73.         AkelPad.MessageBox(hMainWnd, sTxtBitness, WScript.ScriptBaseName, 0 /*MB_OK*/);
  74.         WScript.Quit();
  75.       }
  76.     }
  77.   }
  78.   // yzh's mod end
  79.  
  80.   if (AkelPad.GetEditModified(0) || AkelPad.SendMessage(hMainWnd, 1291 /*AKD_FRAMESTATS*/, 1 /*FWS_COUNTMODIFIED*/, 0))
  81.   {
  82.     switch (AkelPad.MessageBox(hMainWnd, sTxtSaveAll, WScript.ScriptBaseName, 0x23 /*MB_ICONQUESTION|MB_YESNOCANCEL*/))
  83.     {
  84.       case 6 /*IDYES*/:
  85.         if (! AkelPad.Command(nMDI ? 4110 /*IDM_FILE_SAVEALL*/ : 4105 /*IDM_FILE_SAVE*/)) return;
  86.         break;
  87.       case 7 /*IDNO*/:
  88.         if (nMDI)
  89.         {
  90.           nTabs = AkelPad.SendMessage(hMainWnd, 1291 /*AKD_FRAMESTATS*/, 0 /*FWS_COUNTALL*/, 0);
  91.           for (i = 0; i < nTabs; ++i)
  92.             AkelPad.SendMessage(hMainWnd, 1229 /*AKD_SETMODIFY*/, AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 2 /*FI_WNDEDIT*/, AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 8 /*FWF_BYTABINDEX*/, i)), 0);
  93.         }
  94.         else
  95.           AkelPad.SendMessage(hMainWnd, 1229 /*AKD_SETMODIFY*/, 0, 0);
  96.         break;
  97.       case 2 /*IDCANCEL*/:
  98.         return;
  99.     }
  100.   }
  101.  
  102.   if (nMDI)
  103.   {
  104.     if (oFSO.FileExists(AkelPad.GetAkelDir(4 /*ADTYPE_PLUGS*/) + "\\Sessions.dll"))
  105.     {
  106.       AkelPad.Call("Sessions::Main", 2, "OnExit");
  107.       if (AkelPad.IsPluginRunning("Sessions::Main"))
  108.         AkelPad.Call("Sessions::Main", 10); //stop plugin
  109.     }
  110.     else if (AkelPad.SendMessage(hMainWnd, 1291 /*AKD_FRAMESTATS*/, 0 /*FWS_COUNTALL*/, 0) > 1)
  111.       AkelPad.MessageBox(hMainWnd, sTxtToRestore, WScript.ScriptBaseName, 0x30 /*MB_ICONWARNING*/);
  112.   }
  113.  
  114.   if (AkelPad.IsPluginRunning("Exit::Main"))
  115.     AkelPad.Call("Exit::Main"); //stop plugin
  116.  
  117.   AkelPad.Exec('"' + sWscriptExe + '" "' + WScript.ScriptFullName + '" "' + sAkelExe + '" "' + AkelPad.GetEditFile(0) + '" ' + nMDI + ' ' + nPID);
  118.   AkelPad.Command(4109 /*IDM_FILE_EXIT*/);
  119. }
  120.  
  121. function RunAkelPad(sAkelExe, sEditFile, nMDI, nPID)
  122. {
  123.   var oWshShell = new ActiveXObject("WScript.Shell");
  124.  
  125.   while (! oWshShell.Run('qprocess.exe ' + nPID, 0 /*hide cmd window*/, 1 /*return errorlevel*/))
  126.     WScript.Sleep(20);
  127.  
  128.   oWshShell.Run('"' + sAkelExe + '" /Call("Scripts::Main",1,"' + WScript.ScriptName + '",`"' + sEditFile + '" ' + nMDI + '`)');
  129. }
  130.  
  131. function OpenFiles(sEditFile, nMDI)
  132. {
  133.   if (nMDI && AkelPad.IsMDI() && (new ActiveXObject("Scripting.FileSystemObject").FileExists(AkelPad.GetAkelDir(4 /*ADTYPE_PLUGS*/) + "\\Sessions.dll")))
  134.     AkelPad.Call("Sessions::Main", 1, "OnExit");
  135.   else if (sEditFile)
  136.     AkelPad.OpenFile(sEditFile, 0x002 /*OD_ADT_REG_CODEPAGE*/);
  137. }
  138.  
  139. function GetLangStrings()
  140. {
  141.   if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1045 /*Polish*/)
  142.   {
  143.     sTxtSaveAll   = "Czy zapisaж wszystkie zmienione dokumenty przed restartem?";
  144.     sTxtToRestore = "Їeby przywrуciж wszystkie karty po restarcie, pownieneњ zainstalowaж wtyczkк Sessions.";
  145.     sTxtBitness   = "It is impossible to run the AkelPad (x64) on the 32-bit machine";
  146.   }
  147.   else if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049 /*Russian*/)
  148.   {
  149.     sTxtSaveAll   = "Сохранить все изменённые документы перед перезагрузкой?";
  150.     sTxtToRestore = "Для восстановления после перезагрузки всех открытых вкладок, необходимо установить плагин Sessions";
  151.     sTxtBitness   = "Невозможно запустить 64-битный AkelPad на 32-битной машине";
  152.   }
  153.   else
  154.   {
  155.     sTxtSaveAll   = "Save all modified documents before restart?";
  156.     sTxtToRestore = "To restore all tabs after restart, you should install Sessions plugin.";
  157.     sTxtBitness   = "It is impossible to run the AkelPad (x64) on the 32-bit machine";
  158.   }
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement