Распаковка mime, uue, b64

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Rodny писал(а):Кстати, все варианты через MhtUnPack у меня работать отказываются.
Оно и понятно. Если они повязаны на одном плагине, то достаточно было эксперимента с b64.

Вопрос к обоим: а вход по Enter (отдельно от скриптов) с учётом метода (+ 256) в эти файлы производится?
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Flasher писал(а):а вход по Enter (отдельно от скриптов) с учётом метода (+ 256) в эти файлы производится?
У меня тоже изначально 415 в параметрах, входа по Enter нет.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Flasher
Нет. Стоит 415 = дефолтное волшебное число MhtUnPack
Оно и понятно. Если они повязаны на одном плагине, то достаточно было эксперимента с b64.
Не совсем. Некоторые куски кода с форума у меня выдавали нерабочие файлы, если расширение ставилось .b64, а с расширением .uue распаковывались правильно.

Rodny
Ошибка чтения диска.
Попробуй где-нибудь ближе к началу вставить строку TCS.Pause=500
Последний раз редактировалось Tol!k Вс окт 17, 2010 18:57, всего редактировалось 1 раз.
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Tol!k
Ага, поставил после F.Close, заработало.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Flasher писал(а):А ридмишный коммент по SetTrgPath там для чего фигурирует?
:oops: В спешке не тот фрагмент скопировал, исправлю. Мне кажется, что метод достаточно полезный. Вот и решил таким образом о нем напомнить.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

' Получение в текущей папке файла из кодированного текста
' буфера обмена в виде B64/MIME/UUD/UUE/XXD/XXE/BinHex/AtoB/BtoA

' Автор - Flasher ©
'===============================================

Dim FSO, WSH, F, TF
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
TempFolder = WSH.ExpandEnvironmentStrings("%TEMP%") & "\0"
If Not FSO.FolderExists(TempFolder) Then FSO.CreateFolder TempFolder
TempFile = TempFolder & "\" & FSO.GetTempName
NewFile = TempFolder & "\*.*"
Set F = FSO.OpenTextFile(TempFile, 2, True)
P = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
A = WSH.RegRead(P)
If A > 0 Then WSH.RegWrite P, 0, "REG_DWORD"
Clip = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
F.Write Clip
F.Close
Set TF = WSH.Exec("%COMMANDER_PATH%\Utils\Fcode32\fcode32.exe " & TempFile)
TF.Terminate
FSO.DeleteFile TempFile, 1
If FSO.GetFolder(TempFolder).Files.Count > 0 Then _
FSO.MoveFile NewFile, WSH.CurrentDirectory Else WScript.Quit
FSO.DeleteFolder TempFolder, 1
WSH.SendKeys "^R"
If A > 0 Then WSH.RegWrite P, A, "REG_DWORD"
Set FSO = Nothing
Set WSH = Nothing
WScript.Quit
Ссылка на прогу
Отмеченное красным цветом заменить на свой путь к утилите.
Аватара пользователя
Total7zip
Сообщения: 287
Зарегистрирован: Сб ноя 27, 2010 03:22

Сообщение Total7zip »

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

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

// File: DecodeFromClipboard.js
// Распаковывает mime, uue, b64 текст 
// скопированный в буфер обмена в текущую папку 
//
// Для работы нужен: Script Helper ActiveX for TC
// http://wincmd.ru/plugring/script_helper.html
//
// В этой версии для работы не нужны WCX плагины (MhtUnPack.wcx)
// Если объект TCSCRIPT.Helper не зарегистрирован, этот скрипт временно 
// зарегистрирует его. см. ниже переменную TCWSHELP_PATH
// Корректно обрабатывается ситуация, если файл уже существует.
// Временный файл корректно удаляется, панель TC обновляется.
//
// (c) 2010, lev, Tol!k, Andrey_A, Volniy
// (c) 2011, Total7zip
// Обсуждение: http://forum.wincmd.ru/viewtopic.php?t=13531


//путь к Script Helper ActiveX for TC
var TCWSHELP_PATH = "%COMMANDER_PATH%\\Utils\\TC\\TCWSHelp\\TCWSHelp.exe"; 

var tcHelper = null;
var wshShell = null;
var bUnreg = false;

try
{
	tcHelper = WScript.CreateObject("TCSCRIPT.Helper");
}
catch(e)
{
    //если TCWSHelp.exe не зарегистрирован - регистрируем его
    wshShell = WScript.CreateObject("WScript.Shell");
    wshShell.Run(TCWSHELP_PATH + " /REGSERVER", 1, true);
    tcHelper = WScript.CreateObject("TCSCRIPT.Helper");
    bUnreg = true;
}

//создаем в текушей папке временный файл и пишем в него содержимое буфера обмена
var fso = WScript.CreateObject("Scripting.FileSystemObject");
var tempFile = tcHelper.GetSrcPath () + "\\" + fso.GetTempName();
var f = fso.CreateTextFile(tempFile, true); 
f.Write (tcHelper.GetTextFromClip ());
f.Close ();
f = null;

tcHelper.SetSrcPath    (tempFile);

//посылаем команду, без ожидания завершения, TC показывает диалог
tcHelper.SendCommand   ("cm_Decode", false); 
//убираем путь в диалоге - нам надо декодировать в текущую папку
tcHelper.SendKeystroke ("{BKSP}");  
tcHelper.SendKeystroke ("{Enter}"); //нажимаем ОК в диалоге

//удаляем временный файл, try нужен, чтоб дождаться пока TC завершит декодирование
while (true)
{
    try
    {
        WScript.Sleep (1000);
        fso.DeleteFile (tempFile);          
        break;
    }
    catch(e)
    {
    }
}

tcHelper.SendCommand ("cm_RereadSource", false);

//чистим, удаяем объекты.
fso = null;
tcHelper = null;
if (bUnreg)
{
    //если TCWSHelp.exe не был зарегистрирован - разрегистрируем его
    wshShell.Run(TCWSHELP_PATH + " /UNREGSERVER", 1, true);
}
wshShell = null;
WScript.Quit();
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Total7zip писал(а):

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

WScript.Sleep (1000);
Если кодированного текста много, этого может не хватить.
Аватара пользователя
Total7zip
Сообщения: 287
Зарегистрирован: Сб ноя 27, 2010 03:22

Сообщение Total7zip »

вы не правы.
обратите внимание, что этот код вызывается в цикле.
до тех пор пока TC работает с файлом fso.DeleteFile возвращает ошибку и цикл продолжается.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Ага, есть такое дело. Может, тогда и слип поменьше поставить, 500, например?
Аватара пользователя
Total7zip
Сообщения: 287
Зарегистрирован: Сб ноя 27, 2010 03:22

Сообщение Total7zip »

я думаю, меньше секунды рисковано.
во-первых я не знаю насколько быстро TC захватит файл после того как мы посылаем Enter

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

tcHelper.SendKeystroke ("{Enter}");
возможно, если спешить, скрипт удалит файл раньше чем TC успеет обратиться к нему.
во-вторых этот параметр влияет только на то, когда скрипт удалит ненужный файл - секундой раньше или позже, мне кажется не важно.
новый декодированный файл становится доступен сразу же, независимо от этого вызова Sleep.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Total7zip писал(а):во-первых я не знаю насколько быстро TC захватит файл после того как мы посылаем Enter
Предлагаю проверить. )
Total7zip писал(а):возможно, если спешить, скрипт удалит файл раньше чем TC успеет обратиться к нему.
Это вряд ли. Пол секунды - это не так уж и быстро.
С остальным согласен.
Но мне работа моего скрипта больше нравится. :)
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Flasher писал(а):' Получение в текущей папке файла из кодированного текста
' буфера обмена в виде B64/MIME/UUD/UUE/XXD/XXE/BinHex/AtoB/BtoA

' Автор - Flasher ©
не может выцепить имена файлов из кодов, созданных uuencode.exe

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

---------------------------
Notice!
---------------------------
The default output filename was not found!
Encoded contents may be corrupted.
 Fastcode will save the output file using the input filename.
---------------------------
ОК   
---------------------------
примеры http://www.google.com/search?q=%22begin ... -board.com

зы
из-за кириллицы
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k
А можно не гугл, а ссылки на конкретные коды?
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Ответить