AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Scripts discussion (2)
Goto page Previous  1, 2, 3 ... 87, 88, 89 ... 94, 95, 96  Next
 
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
yozhic



Joined: 20 Jun 2011
Posts: 76
Location: Электросталь

PostPosted: Thu Feb 27, 2014 5:12 pm    Post subject: Reply with quote

Infocatcher
Quote:
падает при перезапуске (но перезапускается при этом корректно)

И у меня такое же поведение. Вообще, воспроизводится падение так: открываю документ, работаю с ним от 40 секунд и больше, сохраняю, перезапускаю скриптом - упал. Но скриптом AutoSaveSession я не пользуюсь.
Quote:
От порядка тех строк не зависит

Действительно, потом возобновились падения. Пока мне удалось, на ощупь по-дилетантски, решить проблему следующим образом. В скрипте Restart.js перед последним обращением к плагину Sessions
Code:
if(!AkelPad.IsPluginRunning("Sessions::Main")) ...

я поставил 1,5 секундную паузу. Пока, со вчерашнего вечера ... падает, но значительно реже.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5507

PostPosted: Sat Mar 01, 2014 6:41 am    Post subject: Reply with quote

yozhic
Если так попробовать?
Quote:
var cmd = '"%nirCmd%" waitprocess /%pid% cmdwait 1000 exec2 show "%workDir%" "%akelExe%"';
Back to top
View user's profile Send private message Send e-mail
yozhic



Joined: 20 Jun 2011
Posts: 76
Location: Электросталь

PostPosted: Sat Mar 01, 2014 11:29 am    Post subject: Reply with quote

Instructor
Quote:
Если так попробовать?

Вроде как падение происходит раньше. При обращении к плагину Sessions (если я правильно понимаю). Вот так это выглядит в System Explorer:
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5507

PostPosted: Sat Mar 01, 2014 5:44 pm    Post subject: Reply with quote

yozhic
Можете выслать/выложить свою папку с AkelPad'ом?
Back to top
View user's profile Send private message Send e-mail
yozhic



Joined: 20 Jun 2011
Posts: 76
Location: Электросталь

PostPosted: Sun Mar 02, 2014 1:47 pm    Post subject: Reply with quote

Instructor
Выслал почтой.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5507

PostPosted: Sun Mar 02, 2014 3:10 pm    Post subject: Reply with quote

yozhic
У вас используется не последняя версия скрипта. Попробуйте с последней версией.

Infocatcher
closeLeftOrRightTabs.js - можно было использовать AKD_GETMAININFO и MI_TABOPTIONSMDI.
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1646

PostPosted: Mon Mar 03, 2014 7:17 am    Post subject: Reply with quote

Instructor wrote:
closeLeftOrRightTabs.js - можно было использовать AKD_GETMAININFO и MI_TABOPTIONSMDI.

Спасибо, обновил.

tabsRightLeft.js
tabsNextPrevious.js
tabsSwitchAlt.js

closeLeftOrRightTabs.js
Use AKD_GETMAININFO instead of menu trick
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1646

PostPosted: Mon Mar 03, 2014 7:42 am    Post subject: Reply with quote

The same for saveStoreTime.js.
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5507

PostPosted: Mon Mar 03, 2014 7:52 am    Post subject: Reply with quote

Infocatcher
Для AKD_SETMAININFO используется MIS_*.
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1646

PostPosted: Mon Mar 03, 2014 8:27 am    Post subject: Reply with quote

Instructor wrote:
Для AKD_SETMAININFO используется MIS_*.

Ой, и правда.
А какой смысл их разделять, если числа те же?

[Upd] Подправил.
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5507

PostPosted: Tue Mar 04, 2014 2:46 pm    Post subject: Reply with quote

Infocatcher
Числа совпадают, но синтаксис отличается (lParam и возвращаемое значение). Числа постарался сделать одинаковыми, именно на случай невнимательности разработчиков (включая меня) Smile
Back to top
View user's profile Send private message Send e-mail
yozhic



Joined: 20 Jun 2011
Posts: 76
Location: Электросталь

PostPosted: Thu Mar 06, 2014 7:58 am    Post subject: Reply with quote

Instructor
Quote:
У вас используется не последняя версия скрипта

Ух, простите, шум такой поднял, а оказалась простая невнимательность Sad С последней версией всё как часы работает.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5507

PostPosted: Thu Mar 06, 2014 11:29 am    Post subject: Reply with quote

Infocatcher
Code:
   if(uMsg == 0x406 /*AKDN_MAIN_ONFINISH*/) {
      oSys.Call("user32::PostQuitMessage", 0); // Exit message loop
      return;
   }

Этот кусок можно убрать. В последних версиях Scripts плагина он делает это самостоятельно.

В скрипте используется ActiveXObject("htmlfile") для таймера. В данном случае предпочтительно без стороннего объекта (возможно падения исчезнут):

TimerExample.js

Code:
var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var lpTimerCallback=0;
var nIDEvent=10;
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 (AkelPad.WindowSubClass(2 /*WSC_EDITPROC*/, EditCallback, 0x100 /*WM_KEYDOWN*/))
  {
    //Allow other scripts running.
    AkelPad.ScriptNoMutex();

    //Message loop.
    AkelPad.WindowGetMessage();

    AkelPad.WindowUnsubClass(2 /*WSC_EDITPROC*/);
  }
}

function EditCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 0x100 /*WM_KEYDOWN*/)
  {
    //User press S key
    if (wParam == 83 /*s*/)
    {
      //Set timer
      if (!lpTimerCallback)
      {
        if (lpTimerCallback=oSys.RegisterCallback("TimerProc"))
          oSys.Call("user32::SetTimer", hMainWnd, nIDEvent, 1000, lpTimerCallback);
      }
    }
    //User press D key
    else if (wParam == 68 /*d*/)
    {
      //Destroy timer
      if (lpTimerCallback)
      {
        oSys.Call("user32::KillTimer", hMainWnd, nIDEvent);
        oSys.UnregisterCallback(lpTimerCallback);
        lpTimerCallback=0;
      }
    }
  }
}

function TimerProc(hWnd, uMsg, nIDEvent, dwTime)
{
  oSys.Call("user32::SetWindowText" + _TCHAR, hMainWnd, "" + dwTime);
}


Last edited by Instructor on Fri Mar 07, 2014 4:35 am; edited 2 times in total
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1646

PostPosted: Thu Mar 06, 2014 4:36 pm    Post subject: Reply with quote

Instructor wrote:
В скрипте используется ActiveXObject("htmlfile") для таймера. В данном случае предпочтительно без стороннего объекта (возможно падения исчезнут)
Эх, видимо, придется. Спасибо за пример.
Просто все эти штуки неудобны в использовании из-за вот этого
Code:
oSys.RegisterCallback("TimerProc")

То есть нужна глобальная функция и как-то даже сходу не придумать, как без eval() сделать полноценный аналог setTimeout(). В данном случае, конечно, это излишне, но тем не менее.

Я правильно понимаю, что одноразовые таймеры не предусмотрены, и нужно делать так:
Code:
function TimerProc(hWnd, uMsg, nIDEvent, dwTime)
{
  oSys.Call("user32::KillTimer", hMainWnd, nIDEvent);
  ...
}

?

И при этом
Code:
lpTimerCallback=oSys.RegisterCallback("TimerProc")

можно создать только один раз?

Этот _In_ UINT_PTR nIDEvent – вообще любое UINT число? Почему тогда 10, а не 1 или 0?

Пока вот так: https://github.com/Infocatcher/AkelPad_scripts/compare/f0755f94e6...c622b51be3
Вроде бы работает...
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5507

PostPosted: Fri Mar 07, 2014 4:49 am    Post subject: Reply with quote

Infocatcher wrote:
Этот _In_ UINT_PTR nIDEvent – вообще любое UINT число? Почему тогда 10, а не 1 или 0?
Не 0, потому что "A nonzero timer identifier". Не 1-9, потому что резерв для hMainWnd (вдруг появятся).
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 87, 88, 89 ... 94, 95, 96  Next
Page 88 of 96

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group