· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Как прикрутить командную строку к гуёвой проге

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Июл 30, 2003 20:19:08 · Поправил: Безпощадный даос

Имеется программа по удалению макросов из файлов MSWord97,
но есть у неё такое неудобство, обрабатываемый файл нужно
предварительно выбрать в окошке и нажать "Delete", но
мне нужно обработать каталог состоящий из ~400 файлов.
Подскажите как лучше поступить, присобачить ей командную
строку? или может есть какое-нибудь более оригинальное
решение, да, прога написана на, блин, Дельфине, исходников
нет. Вот, если кому интересно: MacroZapper


Дата: Июл 31, 2003 04:13:54

Симуляция дфижения мышки?


Дата: Июл 31, 2003 04:34:40

Это как, типа чтоб прога думала что я всё сам мышью выбираю?
Ещё добавлю, прога выкидывает два окошка, о том что макросы будут
удалены и еще о том что удаление завершено, блин, делать автору
было нечего, ещё хоть прога и не запакована и даже серийник торчит
в коде, но код изрядно использует SEH.


Дата: Июл 31, 2003 05:01:49 · Поправил: xzazet

Была такая же проблема (думаю, что даже с более сложным софтом - перекидывал данные из excel'я в один аналитический пакет, который хотел работать только со своим форматом файлов, наглец - а все остальное вручную :( ). решил почти как comrade подсказал.

Мышь, кстати, использовать не обязательно - это я понял, когда пришлось работать на компьютере без мыши, оказывается можно с успехом и без нее обходиться :).

Окошки посмотрите, что там по дефолту стоит - если ОК, то посылаете в окно 'пробел', если другое, то 'TAB' и 'пробел' (если всего две кнопки).

По списку файлов (я так понимаю, список из 400 файлов в листбоксе?) просто серфишь event'ами нажатия клавиш. Ну и еще проблема синхронизации.

Добавлю, что можно по всему списку и не бродить, просто программно копировать по одному файлу в папку, патчить его и мовить в другое месть - так быстрее получится.


Дата: Июл 31, 2003 05:05:50

ну и еще. Название темки бы поправили, а то "нужен совет..." немного однобоко отражает суть проблемы.


Дата: Июл 31, 2003 05:54:29

Немного покопав я обнаружил место где прога получает полный путь
к файлу, поправил в памяти окончание этой строки на нужный мне файл,
и программа скушала обработав нужный файл, хотя в FileListBox
первоначально был выбран другой, вот если получится найти окончание
всей процедуры, то можно будет её зациклить на обработку всех файлов
в каталоге, но несколько мешает незнание мной Дельфи и SEH обработчики,
да, окошки тоже просто так не вырежешь, это не MessageBox.
comrade,xzazet спасибо за советы, но мне кажется, что
для меня так сложнее будет...


Дата: Июл 31, 2003 06:26:57

Asterix
А написать свою программу по вырезанию макросов?


Дата: Июл 31, 2003 06:42:05 · Поправил: Asterix

Знать бы формат этих файлов *.dot, но не думаю что это будет
быстрее..., меня бы даже лучше устроила консольная утилита, работающая
в командной строке, такая как AVP MacroKiller от Касперского,
но она только под Word7 включительно :(


Дата: Июл 31, 2003 06:45:28

Вот для наглядности, главное окно программы:


_1035474209__MacroZapper.PNG


Дата: Июл 31, 2003 06:48:19



Дата: Июл 31, 2003 07:17:43

Asterix
По поводу консольной версии надо думать.
Вариант на VBA будет проще.


Дата: Июл 31, 2003 08:09:10

Я себе так представляю, что можно написать ещё один запускной
файл, который загрузит этот основной файл, получит имя обрабатываемого
файла из командной строки вместе с полным путём и сделает прыжок
на нужный адрес в программе в то место где подставляется эта строка
я его уже нашёл:
CODE:004529CD           call    dword ptr [ecx+0CCh]
CODE:004529D3           mov     eax, [ebp+var_4];<-заносим в eax
                                                ;  адрес строки c
                                                ;  полным путём к
                                                ;  к файлу


ну нужно будет немного пропатчить оригинальный файл и в принципе
должно работать...


Дата: Июл 31, 2003 11:52:27 · Поправил: masquer

>Знать бы формат этих файлов *.dot, но не думаю что это будет быстрее
Если лишних полгода есть :) Это недокументированная вещь, плюс сам макрос храниться в сжатом виде (LZW кажется)

Проще всего добавить свой код с FindFirstFile - FindNextFile. После того, как выбран каталог, сделать прыжок на свою процедуру, которая будет искать и передавать имя файла в процедуру удаления макросов. В принципе - работы на полчаса (если никаких проблем не будет, типа подсчета CRC в нескольких местах и противоотладочных/трассировочных приемов)


Дата: Июл 31, 2003 12:50:43

Asterix
Поковырял немного, так и есть:
CODE:004529DB push eax ; eax = указатель на имя файла
CODE:004529DC call sub_4506FC ; = процедура удаления макроса

Дальше работы на полчаса :)


Дата: Июл 31, 2003 13:30:13

Значит дела такие: CRC проверок в проге нет, удалось избавиться
от одного окошка, думаю за другими дело не станет...

[ masquer Проще всего добавить свой код с FindFirstFile - FindNextFile.]

Это излишне, достаточно заставить запускаться прогу и брать в качестве
входного параметра полную строку к файлу, а дальше проблема решается
написанием bat файла на обработку целого каталога.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.100