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 

Log plugin
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Sat Mar 17, 2012 8:06 pm    Post subject: Reply with quote

Отличный рантайм, по мне. Есть куча всего. Меня устраивает, а кому не нравится - так ведь и не заставляют же. Пускай хоть на батч файлах пишет, там рантайм вообще нулевой )))
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5174

PostPosted: Sun Mar 18, 2012 2:12 pm    Post subject: Reply with quote

Благодаря инициативности DV, рациональные предложения по изменению внешних вызов плагина, были реализованы Smile
Back to top
View user's profile Send private message Send e-mail
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5174

PostPosted: Sun Mar 18, 2012 2:17 pm    Post subject: Reply with quote

Добавлено: параметр во внешний вызов с кодом 3, для получения состояния запуска приложения (Log::Output).
Добавлено: внешние вызовы с кодом 4 и 5 для установки/добавления текста в панель вывода (Log::Output).

Added: parameter in external call with code 3 to get execution state (Log::Output).
Added: external calls with code 4 and 5 to set/add text in the output panel (Log::Output).


Log plugin v1.9
Back to top
View user's profile Send private message Send e-mail
DV



Joined: 16 Nov 2006
Posts: 807
Location: Kyiv, Ukraine

PostPosted: Sun Mar 18, 2012 5:16 pm    Post subject: Reply with quote

Что-то здесь не так...
Если у меня в Log::Output запущен cmd.exe, то как только я вызываю Call("Log::Output", 5, "* 123 *"), тут же пропадает поле ввода и кнопки Ввод и Стоп, лишая возможности набрать "exit" для завершения cmd.exe.
А Call("Log::Output", 3) иногда возвращает ненулевой PROCESSHANDLE, но нулевой PLUGINTHREAD.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5174

PostPosted: Sun Mar 18, 2012 6:24 pm    Post subject: Reply with quote

DV
Как ведет себя версия 2.0?
Back to top
View user's profile Send private message Send e-mail
DV



Joined: 16 Nov 2006
Posts: 807
Location: Kyiv, Ukraine

PostPosted: Sun Mar 18, 2012 6:44 pm    Post subject: Reply with quote

Instructor wrote:
Как ведет себя версия 2.0?

Первое (кнопки) починилось, второе (PLUGINTHREAD) - нет. Вот этот кусок мне не нравится:
Quote:
if (IsExtCallParamValid(pd->lParam, 2))
lpdwExecState=(DWORD *)GetExtCallParam(pd->lParam, 2);
if (IsExtCallParamValid(pd->lParam, 3))
lphExecThread=(HANDLE *)GetExtCallParam(pd->lParam, 3);
if (IsExtCallParamValid(pd->lParam, 4))
lphExecThread=(HANDLE *)GetExtCallParam(pd->lParam, 4);

И похоже, что параметр APPEND в "Log::Output",5 игнорируется.
Кстати, а зачем разделение на "Log::Output",4 и "Log::Output",5 ?
Вот обновлённый проверочный скрипт для всего этого дела:
LogOutputTest.js
Code:
Test3();

function Test1()
{
  var dwState = 0;
  var lpState = AkelPad.MemAlloc(4 /*sizeof(DWORD)*/);
  if (lpState)
  {
    AkelPad.Call("Log::Output", 3, lpState);
    dwState = AkelPad.MemRead(lpState, 3 /*DT_DWORD*/);
    AkelPad.MemFree(lpState);
    WScript.Echo(dwState);
  }
}

function Test2()
{
  AkelPad.Call("Log::Output", 5, "Hello!\n");
 
  var hChildProcess = 0;
  var lpChildProcess = AkelPad.MemAlloc(_X64 ? 8 : 4 /*sizeof(HANDLE)*/);
  if (lpChildProcess)
  {
    AkelPad.Call("Log::Output", 3, 0, 0, lpChildProcess);
    hChildProcess = AkelPad.MemRead(lpChildProcess, 2 /*DT_QWORD*/);
    AkelPad.MemFree(lpChildProcess);
    AkelPad.Call("Log::Output", 5, "hChildProcess = " + hChildProcess + "\n");
  }
}

function Test3()
{
  var prevState = -1;
  var dwState = 0;
  var lpState = 0;
  var hPluginThread = 0;
  var lpPluginThread = 0;
  var hChildProcess = 0;
  var lpChildProcess = 0;
  var s;
 
  lpState = AkelPad.MemAlloc(4 /*sizeof(DWORD)*/);
  lpPluginThread = AkelPad.MemAlloc(_X64 ? 8 : 4 /*sizeof(HANDLE)*/);
  lpChildProcess = AkelPad.MemAlloc(_X64 ? 8 : 4 /*sizeof(HANDLE)*/);
 
  if (lpState && lpPluginThread && lpChildProcess)
  {
    AkelPad.Call("Log::Output", 5, "*** Starting cmd.exe...\n", -1, 0);
    AkelPad.Call("Log::Output", 1, "cmd", "", "", "", -1, -1, 8);

    while (prevState != 0)
    {
      AkelPad.Call("Log::Output", 3, lpState, lpPluginThread, lpChildProcess);
      dwState = AkelPad.MemRead(lpState, 3 /*DT_DWORD*/);
      if (dwState != prevState)
      {
        if (dwState >= 4)
        {
          hPluginThread = AkelPad.MemRead(lpPluginThread, 2 /*DT_QWORD*/);
          hChildProcess = AkelPad.MemRead(lpChildProcess, 2 /*DT_QWORD*/);
          s = "*** The process " + hChildProcess + " has been created in thread " + hPluginThread + "\n";
          s = s + "*** Now please type \"exit\" to exit cmd.exe...\n";
        }
        else if (dwState >= 2)
        {
          hPluginThread = AkelPad.MemRead(lpPluginThread, 2 /*DT_QWORD*/);
          s = "*** The plugin thread has been created: " + hPluginThread + "\n";
        }
        else if (dwState >= 1)
        {
          s = "*** Preparing to execute the command...\n";
        }
        else if (dwState == 0 && prevState != -1)
        {
          s = "*** That's all, folks!\n";
        }

        if (dwState != 0 || prevState != -1)
        {
          AkelPad.Call("Log::Output", 5, s);
          prevState = dwState;
        }
      }
      else
      {
        WScript.Sleep(100);
      }
    }
   
    AkelPad.MemFree(lpChildProcess);
    AkelPad.MemFree(lpPluginThread);
    AkelPad.MemFree(lpState);
  }
}


Last edited by DV on Mon Mar 19, 2012 9:04 am; edited 1 time in total
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5174

PostPosted: Sun Mar 18, 2012 7:19 pm    Post subject: Reply with quote

DV
Теперь должно быть нормально.

Quote:
Кстати, а зачем разделение на "Log::Output",4 и "Log::Output",5 ?
Для передачи Ansi строки на Unicode системе или наоборот.
Back to top
View user's profile Send private message Send e-mail
DV



Joined: 16 Nov 2006
Posts: 807
Location: Kyiv, Ukraine

PostPosted: Sun Mar 18, 2012 7:33 pm    Post subject: Reply with quote

Instructor wrote:
Теперь должно быть нормально.

Великолепно! Во всяком случае, проверочный скрипт работает именно так, как ожидается.
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 807
Location: Kyiv, Ukraine

PostPosted: Mon Mar 19, 2012 10:34 am    Post subject: Reply with quote

Instructor wrote:
Quote:
Кстати, а зачем разделение на "Log::Output",4 и "Log::Output",5 ?
Для передачи Ansi строки на Unicode системе или наоборот.

Т.е. получается, что для вывода строк из скрипта по сути нужно использовать что-то вроде
Code:
AkelPad.Call("Log::Output", 4 + _TSTR, "text");

Как-то странно это. Разве тип строки скрипта не определяется системой? (ANSI в 9x, Unicode в 2000 и выше)
Back to top
View user's profile Send private message
FeyFre



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

PostPosted: Mon Mar 19, 2012 11:08 am    Post subject: Reply with quote

Quote:
Т.е. получается, что для вывода строк из скрипта по сути нужно использовать что-то вроде
Во-первых, в формуле должно быть _SIZE (_TSTR это "A" или"W" ) .
Во-вторых, забыл в формуле -1: 4 + _TSIZE = 5 или 6 (_TSIZE == 1 или 2)
В-третьих, из скрипта можно всегда использовать Юникод вариант, ибо WSH реализован на COM который только Юникод. Разве что передашь аргументом указатель на нативную память(выделенные и заполненных через MemAlloc, MemCopy), что будет очень редким исключением.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
DV



Joined: 16 Nov 2006
Posts: 807
Location: Kyiv, Ukraine

PostPosted: Mon Mar 19, 2012 1:18 pm    Post subject: Reply with quote

(_TSTR это "A" или"W" )
Неправда. Scripts-Rus.txt

_TSTR
_____

Константа, определяющая тип строки. Используется для методов MemCopy и MemRead.

_TSTR

Возвращаемое значение
Число. 0 - DT_ANSI - однобайтовая строка (Windows 95/98/Me).
1 - DT_UNICODE - двухбайтовая строка (Windows NT/2000/XP).


В-третьих, из скрипта можно всегда использовать Юникод вариант, ибо WSH реализован на COM который только Юникод.
Спасибо. Точно, всё время забываю, что в неюникодной системе есть что-то юникодное Smile
Back to top
View user's profile Send private message
FeyFre



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

PostPosted: Mon Mar 19, 2012 2:54 pm    Post subject: Reply with quote

Quote:
Неправда. Scripts-Rus.txt
Действительно то _TCHAR. Но как оказалось это не важно Smile
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
DV



Joined: 16 Nov 2006
Posts: 807
Location: Kyiv, Ukraine

PostPosted: Wed Mar 21, 2012 1:15 pm    Post subject: Reply with quote

Если клацнуть правой клавишей мыши по заголовку окна Log::Output, то появляется всплывающее меню, но команды "Очистить" и "Выделить все" не работают. Если же клацнуть над окном редактирования Log::Output, то во всплывающем меню все команды работают.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5174

PostPosted: Thu Mar 22, 2012 6:12 am    Post subject: Reply with quote

Исправлено: контекстное меню на заголовке плагина (Log::Output).

Fixed: context menu on plugin caption (Log::Output).


Log plugin v2.2
Back to top
View user's profile Send private message Send e-mail
FeyFre



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

PostPosted: Fri Mar 23, 2012 2:14 pm    Post subject: Reply with quote

В общем такая вот пакость(Log 2.2):
1. Открыл лог-файл.
2. Включил Log::Watch(Настройки: интервал обновления 1сек, "не перемещать курсор в конец файла". MDI).
Оно себе работает.
3. Занимаюсь своими делами дальше, в том числе и удаляю файл за которым наблюдает лог. При этом к активному наблюдению за логом я вернусь на много позже.
4. Доходят руки до лога(вновь запустил приложение пишущее лог) - переключаюсь на АР. Сюрприз: меня переключило на окно "Can't open file. Plugin will be stopped." в правом нижнем углу. Короче, этих окон там, мягко говоря, много - по окну на каждую секунду после удаления файла.
Надо как-то притормозить с выдачей этих окон, хватит и одного.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next
Page 6 of 10

 
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