Детонатор ака Свободу макросам часть 2
Intro:
Салам всем любителям покопаться в личной жизни многострадальных юзеров. Сегодня, сейчас я начинаю очередной рассказ из жизни макросов. В данной статье , которая как и все предыдущие является ознакомительной и несет чисто информативный характер ,я постараюсь рассказать о технологии запуска файлов офисных приложений с помощью сторонних программ. Или если быть конкретнее мы с вами постараемся написать небольшую программку - загрузчик на VB.Еще раз повторяюсь, что не несу никакой ответственности за все те последствия, которые могут произойти с людьми или с техникой, после прочтения и претворения в жизнь данного опуса. Итак ехаем :
Loading:
Для наших сегодняшних экспериментов нам понадобятся: руки прямые - 2 шт., голова на плечах 1 шт. (но лучше 2) .В ваших письмах вы часто задаете вопрос - каким образом загрузить с помощью макросов стороннее приложение. Делается это следующим образом, предположим у вас вдруг резко возникло желание запустить с помощью обыкновенного офисного файла нужное вам приложение. Например , виндозный Калькулятор или на худой конец Нотпад. Для осуществления этой вашей мечты нужно всего лишь размять пальцы и набрать следующее:
Sub Loader() Dim ExeFileName as Variant ExeFileName=Shell ("c:\WINDOWS\NOTEPAD.EXE") 'запускаем НОТПАД End Sub
Как видите ничего сложного в этом нет. Используется функция Shell ,которая имеет следующий синтаксис :
Shell(pathname[,windowstyle])
Единственный необходимый параметр у этой функции - pathname это полный путь к исполняемому файлу, второй параметр взят в квадратные скобки это говорит о том, что данный параметр не обязательный. Он может принимать значения которые приведены в таблице :
Константа | Цифровой эквивалент | Описание |
---|---|---|
vbHide | 0 | Окно запускаемого приложения невидимо и фокус передается в это невидимое окно (запущенное приложение можно увидеть по CTRL+ALT+DELETE).Но такой финт невозможен на Макплатформах. |
vbNormalFocus | 1 | Окно запускаемого приложения видимо на дисплее и принимает свой оригинальный размер и позицию, фокус также передается запущенному приложению. |
vbMinimizedFocus | 2 | Окно запускаемого приложения сворачивается в кнопку на Таскбаре фокус также приходится на нее. |
vbMaximizedFocus | 3 | Окно запускаемого приложения максимизируется с фокусировкой. |
vbNormalNoFocus | 4 | Окно запускаемого приложения принимает свой оригинальный размер и позицию фокус передается активному в данный момент приложению. |
vbMinimizedNoFocus | 6 | Окно запускаемого приложения сворачивается в кнопку на Таскбаре фокус передается активному в данный момент приложению. |
По-моему все предельно ясно. С этим вроде разобрались .Теперь приступим к основной части нашего с вами сегодняшнего задания :
Dim 2 as variant:
Начнем-с. Общеизвестно, что если есть бомба, то должен быть и детонатор. Т.Е.у вас есть макрокод (неважно какого рода), но при его запуске предупреждение о безопасности сводит все ваши старания на нет. Значит вам нужен детонатор чтобы эту бомбу (макрос) завести .Как я и обещал сейчас мы с вами попробуем написать программу-детонатор (загрузчик) на VB с помощью которой попытаемся запустить офисный файл .
Открываем VB (любой версии) у меня на компе 6 установлен в следующем диалоговом окне (рис.1) выбираем Standard EXE ,дальше из проекта удаляем все формы (сегодня нам не до них) хотя нет одну форму все-таки оставьте и добавьте туда же стандартный модуль. С этим я надеюсь у вас никаких проблем не должно возникнуть. Форму пока оставьте в покое ее займемся чуть позже. Открывайте свой модуль и пишите ( Листинг # 2). Код закомментирован, так что проблем быть не должно.
Рисунок 1 - Все стандартное просто.
Option Explicit Private Excel As Object 'объявляем переменную Excel как объект Sub Main() On Error GoTo ExitSub: 'обработка исключительных ситуаций '(иногда они происходят) Set Excel = CreateObject("Excel.Application") 'объявление объекта Excel.Visible = True 'если поставить False,то Ексель стартует в невидимом режиме Excel.Workbooks.Open FileName:= _ App.Path & "\ИмяФайла.xls" 'открываем файл с нашим макросом App.Path -указывает на, то 'что офисный файл должен находиться в той же директории что и 'детонатор. В противном случае вам придется писать функцию 'поиска данного файла, а это очень муторно :-) Excel.Run "ИмяФайла.xls!Loader" 'запускаем наш макрос указав явно его имя Excel.Quit 'закрываем Ексель - он уже выполнил поставленную задачу ExitSub: 'сюда можете(если быть конкретнее нужно)вставить процедуру обработки ошибки End Sub
Откомпилируем проект и вот он наш Детонатор готов. Весит новорожденный всего лишь 20 кб (20480 байт) - неплохо для начала. Некоторые особливо догадливые скажут что к этим 20 кб надо прибавить 1,3 мб , которые весит msvbvm60.dll без него ни одно приложение написанное на VB не заработает. И будут правы, хотя самое главное в данной ситуации это то что мы добились главного запустили макрос без каких либо предупреждений системы безопасности, а остальное всего лишь издержки производства. Теперь можно и поэкспериментировать с детонатором, проверить его в боевых условиях. Открываем офисное приложение, устанавливаем уровень безопасности в Высокая и пытаемся загрузить ВашФайл.xls ,мы видим до боли знакомое предупреждение системы безопасности. Дальше со словами - подожди, подожди у меня, сейчас я тебе.... закрываем офисное приложение и запускаем наш Детонатор. И вот оно свершилось Микрософт опять лажанулась - макрос, то запустился и система безопасности промолчала...
Post FUCKtum ( ):
Ладно замаялся я, что-то. Да, насчет той формы что я оставил в проекте, подумайте на сон грядущий что там сварганить чтобы все выглядело чин - чинарем (чтобы ушастый не испугался и повелся на ваш блеф ). Немаленькие вроде, разберетесь...
На этом разрешите откланяться. В следующий раз разберемся с Дельфой и еще кое с чем. Исходники прилагаются. Что не ясно пишите на мыло, постараюсь ответить. Все всем здравия желаю!!! До новых надеюсь встреч.
To be continued...