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 (3)
Goto page 1, 2, 3 ... 13, 14, 15  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5315

PostPosted: Thu Apr 17, 2014 6:44 am    Post subject: Scripts discussion (3) Reply with quote

RUS: Обсуждение скриптов.

ENG: Scripts discussion.


Scripts discussion (1) 07.07.2007 - 08.09.2011
Scripts discussion (2) 08.09.2011 - 17.04.2014
Scripts discussion (3)
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1614

PostPosted: Thu Apr 17, 2014 8:36 am    Post subject: Reply with quote

(из предыдущей части)
Instructor wrote:
http://akelpad.sourceforge.net/forum/viewtopic.php?p=17567#17567

См. пример GetHex в HexSel-Rus.txt.

Дело в том, что нужен не сам HexSel, а сохранение и восстановление выделения (конкретно вот тут).
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1614

PostPosted: Thu Apr 17, 2014 8:52 am    Post subject: Reply with quote

Нужно вывести некий прогресс, хотелось использовать для этого заголовок окна (как самый простой вариант), но как при этом потом восстановить оригинальный заголовок в MDI-режиме?
Проблема в том, что user32::GetWindowTextW() возвращает реальный заголовок, а если потом выставить полученное через user32::SetWindowTextW(), то изменяемая часть заголовка будет прибавляться в конец добавленного (и будет двоиться). Если при восстановлении вписать «AkelPad», то работает корректно, но вот как получить эту базовую часть программно?
Демонстрация
Code:
var hMainWnd = AkelPad.GetMainWnd();
var orig = windowText(hMainWnd);
windowText(hMainWnd, "Test message");
WScript.Sleep(500);
windowText(hMainWnd, orig);

function windowText(hWnd, pText) {
   if(arguments.length > 1)
      return oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, pText);
   var len = oSys.Call("user32::GetWindowTextLength" + _TCHAR, hWnd);
   var lpText = AkelPad.MemAlloc((len + 1)*_TSIZE);
   if(!lpText)
      return "";
   oSys.Call("user32::GetWindowText" + _TCHAR, hWnd, lpText, len + 1);
   pText = AkelPad.MemRead(lpText, _TSTR);
   AkelPad.MemFree(lpText);
   return pText;
}
Back to top
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1339
Location: Poland

PostPosted: Thu Apr 17, 2014 6:14 pm    Post subject: Reply with quote

Infocatcher

TitleMDI.js
Code:
if (AkelPad.IsMDI() == 1 /*WMD_MDI*/)
{
  var oSys      = AkelPad.SystemFunction();
  var hMainWnd  = AkelPad.GetMainWnd();
  var hWndFrame = AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 1 /*FI_WNDEDITPARENT*/, 0 /*current frame*/);
  var sMainTitle;
  var sFrameTitle;
  var sFullTitle;
  var sMainTitleNew;
  var sFrameTitleNew;
  var sFullTitleNew;

  //get original title
  sFrameTitle = windowText(hWndFrame);
  sFullTitle  = windowText(hMainWnd);
  windowText(hWndFrame, "");
  sMainTitle = windowText(hMainWnd);
  windowText(hWndFrame, sFrameTitle);
  WScript.Echo("Main title part:\t" + sMainTitle + "\n" + "Frame title:\t" + sFrameTitle + "\n" + "Main title full:\t" + sFullTitle);

  //set new title
  windowText(hMainWnd, "New main title");
  windowText(hWndFrame, "New frame title");
  //get new title
  sFrameTitleNew = windowText(hWndFrame);
  sFullTitleNew  = windowText(hMainWnd);
  windowText(hWndFrame, "");
  sMainTitleNew = windowText(hMainWnd);
  windowText(hWndFrame, sFrameTitleNew);
  WScript.Echo("Main title part:\t" + sMainTitleNew + "\n" + "Frame title:\t" + sFrameTitleNew + "\n" + "Main title full:\t" + sFullTitleNew);

  //restore original title
  windowText(hMainWnd, sMainTitle);
  windowText(hWndFrame, sFrameTitle);
  sFrameTitle = windowText(hWndFrame);
  sFullTitle  = windowText(hMainWnd);
  windowText(hWndFrame, "");
  sMainTitle = windowText(hMainWnd);
  windowText(hWndFrame, sFrameTitle);
  WScript.Echo("Main title part:\t" + sMainTitle + "\n" + "Frame title:\t" + sFrameTitle + "\n" + "Main title full:\t" + sFullTitle);
}

function windowText(hWnd, pText) {
   if(arguments.length > 1)
      return oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, pText);
   var len = oSys.Call("user32::GetWindowTextLength" + _TCHAR, hWnd);
   var lpText = AkelPad.MemAlloc((len + 1)*_TSIZE);
   if(!lpText)
      return "";
   oSys.Call("user32::GetWindowText" + _TCHAR, hWnd, lpText, len + 1);
   pText = AkelPad.MemRead(lpText, _TSTR);
   AkelPad.MemFree(lpText);
   return pText;
}
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1614

PostPosted: Thu Apr 17, 2014 7:17 pm    Post subject: Reply with quote

KDJ
Thanks! Still looks tricky, but works fine. Smile
>>>

https://github.com/Infocatcher/AkelPad_scripts/commit/4e2a0d518a5968857387bb34749f35c733b2bec8
Yet another paranoid iteration for 2 years old prototype: commits/master/cryptExt.js (just thanks to Heartbleed Confused).
But unfortunately PBKDF2 is slow by design and especially slow in JScript implementation.
Back to top
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1339
Location: Poland

PostPosted: Thu Apr 17, 2014 8:52 pm    Post subject: Reply with quote

Infocatcher
I forgot to write that this trick should be used only if frame window is maximized (oSys.Call("User32::IsZoomed", hWndFrame)).
http://akelpad.sourceforge.net/forum/viewtopic.php?p=22843
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1614

PostPosted: Fri Apr 18, 2014 5:33 am    Post subject: Reply with quote

KDJ wrote:
I forgot to write that this trick should be used only if frame window is maximized (oSys.Call("User32::IsZoomed", hWndFrame)).
Oh, I see. Thanks again, corrected.
Back to top
View user's profile Send private message Visit poster's website
[Yustas.NeO]



Joined: 12 Mar 2007
Posts: 258

PostPosted: Fri Apr 18, 2014 12:24 pm    Post subject: Reply with quote

Похоже, что в какой-то из последних версий «Scripts.dll» перестал запускаться скрипт SetCoderExt.js. Вернее он запускается и тут же завершается.
Подскажите, пожалуйста, что в нем необходимо изменить?
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2038
Location: Vinnitsa, Ukraine

PostPosted: Fri Apr 18, 2014 1:16 pm    Post subject: Reply with quote

Instructor wrote:
FeyFre
History.js. Запускаю скрипт из диалога Scripts, мелькает окошко и тут же исчезает. При удалении History.ini результат тот же. WinXP x86.

KDJ wrote:
Instructor
FileAndStream.js and Translator.js does not work.
It seems to me that a bug is in AkelPad.WindowSubClass() method.

[Yustas.NeO] wrote:
Похоже, что в какой-то из последних версий «Scripts.dll» перестал запускаться скрипт SetCoderExt.js. Вернее он запускается и тут же завершается.
Подскажите, пожалуйста, что в нем необходимо изменить?

Это к Инструктору Smile Товарищ KDJ довольно точно определил место бага. AkelPad.WindowSubClass() больше не сабкласит главное окно АР если ей передали её главный хендл. Если передают псевдохендл(1), то да работает. Когда отвалилось не знаю, похоже в районе v13.4 - там описывался фикс сабкласинга.

[Yustas.NeO]
Временный костыль пока багу не исправят

Найти
Code:
if(AkelPad.WindowSubClass(g_hAkelPad, AkelPadCallBack))
заменить на
Code:
if(AkelPad.WindowSubClass( 1 , AkelPadCallBack))
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5315

PostPosted: Fri Apr 18, 2014 1:33 pm    Post subject: Reply with quote

Infocatcher wrote:
Дело в том, что нужен не сам HexSel, а сохранение и восстановление выделения (конкретно вот тут).
Это можно в RenameFile.js посмотреть.

FeyFre
Методу WindowSubClass нельзя передавать дескриптор главного окна - он вернет 0. Необходимо в скриптах вместо дескриптора использовать WindowSubClass(1 /*WSC_MAINPROC*/...).


Last edited by Instructor on Fri Apr 18, 2014 1:36 pm; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
[Yustas.NeO]



Joined: 12 Mar 2007
Posts: 258

PostPosted: Fri Apr 18, 2014 1:35 pm    Post subject: Reply with quote

FeyFre wrote:
заменить на
Code:
if(AkelPad.WindowSubClass( 1 , AkelPadCallBack))
Да, спасибо, помогло!
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2038
Location: Vinnitsa, Ukraine

PostPosted: Fri Apr 18, 2014 2:51 pm    Post subject: Reply with quote

Instructor, а хендл окна редактирования тоже нельзя?
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5315

PostPosted: Fri Apr 18, 2014 3:26 pm    Post subject: Reply with quote

FeyFre
Указанное выше касается только главного окна. "WindowSubClass(2 /*WSC_EDITPROC*/...)" устанавливается для всех окон редактирования, "WindowSubClass(hWndEdit...)" для одного окна.
Back to top
View user's profile Send private message Send e-mail
FeyFre



Joined: 07 Aug 2007
Posts: 2038
Location: Vinnitsa, Ukraine

PostPosted: Sat Apr 19, 2014 6:19 pm    Post subject: Reply with quote

Обновлены скрипты
SetCoderExt.js
History,js

Instructor, а какже совместимость назад? Вот 2 скрипта на пустом месте отвалилось, а ведь внутри можно было бы и проверить хендел, вместо того что-бы в скрипте каждый городил.

Я так понимаю WindowUnsubClass это тоже касается?

Я бы с удовольствие пользовался 1 и 2 и 3, если бы они были собственно именованными константами а не просто магическими числами. До-определять их в каждом скрипте тоже извиняюсь не формат.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Infocatcher



Joined: 06 Aug 2007
Posts: 1614

PostPosted: Sun Apr 20, 2014 5:20 pm    Post subject: Reply with quote

forgetAboutTab.js
Add small delay to prevent possible crashes
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page 1, 2, 3 ... 13, 14, 15  Next
Page 1 of 15

 
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