View previous topic :: View next topic |
Author |
Message |
Fr0sT
Joined: 24 Jul 2007 Posts: 876
|
Posted: Sat Mar 17, 2012 8:06 pm Post subject: |
|
|
Отличный рантайм, по мне. Есть куча всего. Меня устраивает, а кому не нравится - так ведь и не заставляют же. Пускай хоть на батч файлах пишет, там рантайм вообще нулевой ))) |
|
Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 6250
|
Posted: Sun Mar 18, 2012 2:12 pm Post subject: |
|
|
Благодаря инициативности DV, рациональные предложения по изменению внешних вызов плагина, были реализованы  |
|
Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 6250
|
Posted: Sun Mar 18, 2012 2:17 pm Post subject: |
|
|
Добавлено: параметр во внешний вызов с кодом 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 |
|
 |
DV
Joined: 16 Nov 2006 Posts: 1014 Location: Kyiv, Ukraine
|
Posted: Sun Mar 18, 2012 5:16 pm Post subject: |
|
|
Что-то здесь не так...
Если у меня в Log::Output запущен cmd.exe, то как только я вызываю Call("Log::Output", 5, "* 123 *"), тут же пропадает поле ввода и кнопки Ввод и Стоп, лишая возможности набрать "exit" для завершения cmd.exe.
А Call("Log::Output", 3) иногда возвращает ненулевой PROCESSHANDLE, но нулевой PLUGINTHREAD. |
|
Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 6250
|
Posted: Sun Mar 18, 2012 6:24 pm Post subject: |
|
|
DV
Как ведет себя версия 2.0? |
|
Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 1014 Location: Kyiv, Ukraine
|
Posted: Sun Mar 18, 2012 6:44 pm Post subject: |
|
|
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 |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 6250
|
Posted: Sun Mar 18, 2012 7:19 pm Post subject: |
|
|
DV
Теперь должно быть нормально.
Quote: | Кстати, а зачем разделение на "Log::Output",4 и "Log::Output",5 ? | Для передачи Ansi строки на Unicode системе или наоборот. |
|
Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 1014 Location: Kyiv, Ukraine
|
Posted: Sun Mar 18, 2012 7:33 pm Post subject: |
|
|
Instructor wrote: | Теперь должно быть нормально. |
Великолепно! Во всяком случае, проверочный скрипт работает именно так, как ожидается. |
|
Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 1014 Location: Kyiv, Ukraine
|
Posted: Mon Mar 19, 2012 10:34 am Post subject: |
|
|
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 |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 2240 Location: Vinnitsa, Ukraine
|
Posted: Mon Mar 19, 2012 11:08 am Post subject: |
|
|
Quote: | Т.е. получается, что для вывода строк из скрипта по сути нужно использовать что-то вроде | Во-первых, в формуле должно быть _SIZE (_TSTR это "A" или"W" ) .
Во-вторых, забыл в формуле -1: 4 + _TSIZE = 5 или 6 (_TSIZE == 1 или 2)
В-третьих, из скрипта можно всегда использовать Юникод вариант, ибо WSH реализован на COM который только Юникод. Разве что передашь аргументом указатель на нативную память(выделенные и заполненных через MemAlloc, MemCopy), что будет очень редким исключением. |
|
Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 1014 Location: Kyiv, Ukraine
|
|
Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 2240 Location: Vinnitsa, Ukraine
|
Posted: Mon Mar 19, 2012 2:54 pm Post subject: |
|
|
Quote: | Неправда. Scripts-Rus.txt | Действительно то _TCHAR. Но как оказалось это не важно  |
|
Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 1014 Location: Kyiv, Ukraine
|
Posted: Wed Mar 21, 2012 1:15 pm Post subject: |
|
|
Если клацнуть правой клавишей мыши по заголовку окна Log::Output, то появляется всплывающее меню, но команды "Очистить" и "Выделить все" не работают. Если же клацнуть над окном редактирования Log::Output, то во всплывающем меню все команды работают. |
|
Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 6250
|
Posted: Thu Mar 22, 2012 6:12 am Post subject: |
|
|
Исправлено: контекстное меню на заголовке плагина (Log::Output).
Fixed: context menu on plugin caption (Log::Output).
Log plugin v2.2 |
|
Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 2240 Location: Vinnitsa, Ukraine
|
Posted: Fri Mar 23, 2012 2:14 pm Post subject: |
|
|
В общем такая вот пакость(Log 2.2):
1. Открыл лог-файл.
2. Включил Log::Watch(Настройки: интервал обновления 1сек, "не перемещать курсор в конец файла". MDI).
Оно себе работает.
3. Занимаюсь своими делами дальше, в том числе и удаляю файл за которым наблюдает лог. При этом к активному наблюдению за логом я вернусь на много позже.
4. Доходят руки до лога(вновь запустил приложение пишущее лог) - переключаюсь на АР. Сюрприз: меня переключило на окно "Can't open file. Plugin will be stopped." в правом нижнем углу. Короче, этих окон там, мягко говоря, много - по окну на каждую секунду после удаления файла.
Надо как-то притормозить с выдачей этих окон, хватит и одного. |
|
Back to top |
|
 |
|
|
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
|
Powered by phpBB © 2001, 2005 phpBB Group
|