Страница 1 из 1

Использование команды cm_decode без запуска тотала

Добавлено: Вт фев 21, 2012 13:03
Aspin
Задача заключается в том чтобы выполнить команду cm_decode в идеале без запуска тотала.
Собственно вижу три варианта:
1. использовать функцию напрямую из библиотеки тотала
2. настроить тотал таким образом, чтобы при его запуске выполнялась команда cm_decode после чего бы он автоматически закрывался
3. написать скрипт запускающий тотал, выполняющий в нем необходимые действия и закрывающий его после этого

Третий вариант как самый простой реализован, однако, есть проблемы связанные с тем что при наличии уже открытого тотала скрипт начинает работать в нем, что очень плохо. Скорость и надежность тоже оставляют желать лучшего.

Возможно ли реализовать первый вариант малой кровью?
Можно ли так настроить тотал как во втором варианте и как это сделать?

Добавлено: Вт фев 21, 2012 13:38
Mellomann
Aspin
Что мешает запускать новый тотал с ключом "/N"?

Добавлено: Вт фев 21, 2012 14:42
Flasher
К сожалению, я вообще не понял, какое отношение имеет к Тоталу то, что нужно без его открытия и, соответственно, реализуется сторонними средствами (утилитами)...

Добавлено: Вт фев 21, 2012 17:32
Вахмурка
А почему никого не смущает то, что команда cm_decode требует, чтобы курсор был установлен на декодируемый файл? При запуске Тотала курсор встает на [..] и вызов cm_decode заведомо даст ошибку. Значит, файл должен быть задан. Как? Абсолютно, или относительно текущего пути? Как осуществлять переход к файлу?

И еще вопрос. Наверняка есть сторонний софт, осуществляющий такое перекодирование. При чем здесь именно функция Тотала, тем более что после выполнения команды он закрывается?

Добавлено: Вт фев 21, 2012 17:51
Flasher
Вахмурка писал(а):Как? Абсолютно, или относительно текущего пути? Как осуществлять переход к файлу?
Ну, примерно так: totalcmd.exe /N /L=c:\file.b64 /P=L.
Вахмурка писал(а):Наверняка есть сторонний софт, осуществляющий такое перекодирование.
Есть. И я его приводил в довесок к своему скрипту декодирования. Об остальном написал выше.

Добавлено: Вт фев 21, 2012 21:33
Aspin
Да, мне нужна именно эта функция в тотале и только она.
На счет стороннего софта пишите конкретные названия, а лучше ссылки откуда скачать. Особенно интересно, если есть опыт использования. Если заинтересует, то буду тестировать. Пока есть опыт говорящий о том, что функция в тотале на данный момент обрабатывает материал лучше чем опробованные аналоги в том числе самописные.

Спасибо за ключ для запуска нового экземпляра программы. Изменю скрипт, который как раз запускает, выбирает нужную папку и файл и вызывает функцию.
В ней не хватает только того чтобы окно закрыть и еще не понятно как получить дескриптор именно нового окна.
Скрипт писал на PowerPro, к сожалению полноценного описания найти не удалось поэтому просто переделывал приведенные примеры в кратком мануале и следовательно что было то есть, на полноту претендовать не могу.

Можно ли настроить сам тотал как во втором варианте без PowerPro, т.е. чтобы запускался, делал что надо и закрывался?

Добавлено: Вт фев 21, 2012 23:05
Вахмурка
На счет стороннего софта пишите конкретные названия, а лучше ссылки откуда скачать
См. выше пост Flasher'а.
Скрипт писал на PowerPro
А не скинешь в ЛС код? Посмотрю на досуге. Авось, что и предложу. А может, наоборот, свой опыт обогащу.

Добавлено: Вт фев 21, 2012 23:43
Tol!k
На счет стороннего софта пишите конкретные названия, а лучше ссылки откуда скачать
Для UUE/XXE достаточно имеющегося практически на каждом компе winRAR-a

Добавлено: Ср фев 22, 2012 00:13
Aspin
Вахмурка, вот тот скрипт:
do("c:\totalcmd\Totalcmd.exe", "/o /l=c:/test /r=c:/testout")
*wait for 200
do("c:\totalcmd\Totalcmd.exe", "/o /l=c:/test /r=c:/testout")
local hwnd=win.handle("c=TTOTAL_CMD")
;Выбираем левую панель
win.sendmessage(hwnd,0x400+51,4001,0)
*wait for 200
*keys {end}
*wait for 50
;Вызываем команду DECODE
win.Postmessage(hwnd,0x400+51,563,0)
*wait for 100
;Жмем энтер в диалоговом окне
*keys {enter}

В папке c:/test должен лежать один файл для работы команды decode.
Два раза подряд вызываю тотал потому что он иногда подтупливал при большом количестве запущенных экземпляров, так стало лучше.
Вейты на случай высокой загрузки системы стоит оставить.

Дескриптор я получаю каким-то странным способом
local hwnd=win.handle("c=TTOTAL_CMD")
никогда с этим не работать не приходилось, но я понял так что он таким образом находит сразу все окна тотала, а выделяем последнее в списке.
Вопрос: как мне получить именно дескриптор нового открывающегося скриптом окна, если я буду использовать ключ /N, т.е. напишу
do("c:\totalcmd\Totalcmd.exe", "/N /o /l=c:/test /r=c:/testout")
Может мне прям эта процедура вернет дексриптор возникающего окна?


Добавлено спустя 8 минут:
Flasher писал(а):Есть. И я его приводил в довесок к своему скрипту декодирования. Об остальном написал выше.
Я на этом форуме первый день, уже второй, но, к сожалению, не видел этого скрипта. Было бы чудесно получить ссылку на него в личку.


Мне требуется снятие протокола MIME, приблуды (утилиты) способные это сделать в студию. О достойных внимания вы получите подробный отчет и сравнительный анализ на многих миллионах сообщений! :)

Добавлено: Ср фев 22, 2012 01:00
Flasher
Aspin
В памятке - первая ссылка на топик, в нём - на посл. странице.

Добавлено: Ср фев 22, 2012 12:02
sa
Aspin писал(а):Можно ли настроить сам тотал как во втором варианте без PowerPro, т.е. чтобы запускался, делал что надо и закрывался?
Не подойдёт ли вариант с использованием плагина Autorun? Он позволит при запуске Total Commander (точнее, его дополнительного экземпляра) выполнить команду cm_decode, задать задержку, затем выполнить команду cm_Exit. Единственно, что потребуется дополнительно, это послать нажатие “Enter”, для чего можно использовать простейший скрипт SendEnter.vbs:

Код: Выделить всё

'=========================================================== 
' Посылает нажатие клавиши Enter 
'=========================================================== 
WScript.CreateObject("WScript.Shell").SendKeys "{Enter}"
Wscript.Quit
Соответственно в файле конфигурации плагина Autorun надо записать что-то вроде:

Код: Выделить всё

Sleep 500
SendCommand cm_Decode
ShellExec "%COMMANDER_PATH%\VBS\SendEnter.vbs"
Sleep 1000
SendCommand cm_Exit
Для использования этого варианта можно создать системную ассоциацию для соответствующего типа (типов) файлов примерно такого вида:

Код: Выделить всё

c:\totalcmd\Totalcmd.exe /I=c:\totalcmd\wincmd_test.ini /N /P=L /R=c:/testout /L="%1"
P.S.
1. В основном варианте wincmd.ini ссылки (в разделе [ContentPlugins]) на autorun.wdx либо вовсе не должно быть, либо это должна быть ссылка на копию плагина с другим Autorun.cfg. Иначе основной TC будет открываться и тут же закрываться.
2. Ключ DecodeAutoRename в разделе [Configuration] нужно установить равным 1, чтобы не возникали вопросы с переименованием результирующих файлов в каталоге testout.

Добавлено: Ср фев 22, 2012 19:51
Вахмурка
Дескриптор я получаю каким-то странным способом
local hwnd=win.handle("c=TTOTAL_CMD")
Почему странным? Совершенно законный способ.
Вопрос: как мне получить именно дескриптор нового открывающегося скриптом окна
Навскидку вижу два способа:
1) Получить заголовок окна и выделить оттуда номер текущей копии в квадратных скобках. К сожалению, способ не универсален, потому как этот номер отключается в настройках;
2) Способ длиннее, но универсальнее. Получить список дескрипторов всех окно с классом TTOTAL_CMD. Запустить Тотал и вновь получить список. Он пополнится новым пунктом. Сравнивая два списка, находим этот новый пункт. Это и есть дескриптор нового окна.