Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16

Перехват макроса запущенного офисного приложения

23.06.2012, 20:38. Показов 2765. Ответов 11

Студворк — интернет-сервис помощи студентам
Открываем стандартно, к примеру, Любой.XLS

Нужно, чтобы вместо него:
- запустился свой макрос (например из личной книги),
- он проанализирует открываемый файл "Любой.XLS"
- даст добро на его запуск (на выбор пользователя "с отключением макросов" или "без".)

В голову приходит только написание VB -> exe-скрипта, на который переназначить "открыть с помощью" все типы офисных приложений.
Но это не совсем эстетично (те же рисунки иконок сольются)...

Альтернатива только перетягивание документа на exe-файл.

Может, есть какие более простые решения в виде надстроек и т.п.?

Добавлено через 24 минуты
Почитал про "Личную книгу макросов".
Итак, макрос из нее запускается автоматически и раньше, чем сам открываемый документ, если присвоить ему имя
Visual Basic
1
sub auto_open()
Но при попытке прочитать информацию об открываемом объекте:
Visual Basic
1
msgbox activebook.name
ошибка, так как "Любой.XLS" еще не открылся.

Как его опознать?
(простой либо сложный способы, может чтение состояния памяти, API)???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.06.2012, 20:38
Ответы с готовыми решениями:

Ошибка при экспорте данных в Word из другого Офисного приложения
Здравствуйте, друзья! Столкнулся с такой проблемой - сделал простенькую базу в Access 2007 (mdb) в которой хранится список литературы. В...

Запуск внешнего приложения из макроса
Поиском не нашел. Как из макроса запустить внешнее приложение? Или, может в .OnAction как-то можно открыть With...

Адаптация макроса Excel для запуска из приложения Access
Добрый день! Имеем: запрос в MS Access, сохраняющий результат в Excel- файле, макрос окрашивания ячеек в VBA Excel. Как возможно прописать...

11
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
23.06.2012, 20:46
разве что так
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
23.06.2012, 21:08  [ТС]
Почти получилось. Но не вариант.
Вот тест:
Personal.xls
Visual Basic
1
2
3
4
5
6
7
8
9
Private WithEvents App As Application
 
Private Sub Workbook_Open()
    Set App = Application
End Sub
 
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    MsgBox "Вы открыли книгу:" & Wb.Name
End Sub
Bad.xls, Thisworkbook
Visual Basic
1
2
3
Private Sub Workbook_Open()
MsgBox "Я - вирус"
End Sub
Bad.xls, Module1
Visual Basic
1
2
3
Sub auto_open()
MsgBox "Я - вирус!"
End Sub
В результате запускается в таком порядке:
1) Пишет имя "Personal.xls"
2) Сообщение системы безопасности
3) Запускает Bad.xls, Thisworkbook
4) Событие Personal.xls определяет имя открываемой книги "Bad.xls"
5) Запускает Bad.xls, Module1

А хотелось бы п.4 между 1-2 или 2-3.
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
23.06.2012, 21:10
(дописка к предыдущему посту):
вот только, боюсь, управлять безопасностью (запрещением/разрешением макросов) этот способ не позволит.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.06.2012, 21:04  [ТС]
Оставим вопрос безопасности мимо этой темы, если по сути нет ничего.
Я и не ожидал простых решений.

Если программа будет работать в нужном порядке, юзер может безопасность в принципе выключить вообще.

Не по теме:

А так, если по этому вопросу интересно, можешь почитать эти статьи:
Детонатор ака Свободу макросам часть 2
Замешан и завернут ака Свободу макросам часть 3
Не проверял, ничего не скажу.
Хотя есть в голове и еще идея как его обойти без .exe, с созданием нового объекта.



А мне наверно придется копать в сторону считывания памяти и API,
если Office Application не дает возможности узнать имя открываемого документа напрямую, перед его открытием (из под макроса личной книги).

Добавлено через 22 часа 54 минуты
Актуально...
0
 Аватар для dzug
695 / 236 / 18
Регистрация: 17.01.2011
Сообщений: 583
Записей в блоге: 1
25.06.2012, 06:42
А не поможет запуск макроса через определённое время?
PureBasic
1
Application.OnTime Now + TimeValue("00:00:05"), "ybr"
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
25.06.2012, 07:00
(буйно) нафантазировал такую схему:

1. пишется стороннее приложение,
2. файлы офисных приложений (можно только екселевских) перевешиваются на это приложение.
3. при запуске офисного файла автоматически запускается наше приложение и "анализирует" файл (при этом приложение, конечно, должно понимать структуру файла или его объектную модель)
4. в случае, если наше приложение дает "добро", оно закрывает файл и тут же открывает его уже в екселе - запустив ексель, если не запущен, или открыв в запущенном екселе.

как это реализовать и на чём - меня не спрашивайте
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
25.06.2012, 16:42  [ТС]
Цитата Сообщение от ikki Посмотреть сообщение
1. пишется стороннее приложение,
ikki, Это уже было (в ТС писал) и там придумывать нечего. Та же родная VB-ховская модель.
Анализ, а потом идет распределение по преложениям по расширению файла, полученного как атрибут.
Это вариант-альтернатива, который мне не очень нравится, хоть и является готовым решением.
Цитата Сообщение от Diskretor Посмотреть сообщение
В голову приходит только написание VB -> exe-скрипта, на который переназначить "открыть с помощью" все типы офисных приложений.
dzug, извините конечно, но Вы "немножно" не в теме.
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
25.06.2012, 18:36
А не устроит ли контроль безопасности макросов на основе цифровой подписи? Tools - Digital signature... Таким способом по крайней мере легко отделить выполнение всех собственных макросов от сторонних. Ну и не проблемма настроить при необходимости доступ к ним нескольким коллегам.

Добавлено через 29 минут
Пуск - Все программы - Microsoft Office - Средства Microsoft Office - Цифровой сертификат для проектов VBA. В окне создания цифрового сертификата введите опознавательный знак Вашего личного цифрового сертификата (я ввел свою фамилию и инициалы) и нажмите OK. При этом на компьютере, где-то в Document And Settings появится ваш файл цифрового сертификата (он может понадобиться для переноса сертификат более чем на одну рабочую машину). Далее в параметрах безопасности макросов (в разных версиях Office по-разному) ставим "отключать все макросы, кроме макросов с цифровой подписью".

Далее подписываем свои файлы с макросами, начиная с personal.xls и заканчивая любым "hello world", в редакторе VBA следующим образом:
Tools - Digital signature... В окне Цифровая подпись нажать кнопку Выбрать... и там выбрать свой только что созданный сертификат. Сейчас на память не помню, но в инете легко найти, как можно потом перенести свой цифровой сертификат на другие машины, вроде бы копированием файла локального сертификата и аналогичной настройкой безопасности макросов. Смысл всех этих манипуляций в том, что сторонний зараженный файл изначально не имеет Вашего сертификата и просто-напросто не запустится.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
25.06.2012, 19:05  [ТС]
Очень интересное развитие. Буду знать.

Но у меня другая цель - написание программы, которая берет на себя функции анализа запускаемого макроса.

Поэтому остановимся на вопросе: как из под автозапускаемого макроса в Personal.xls узнать имя открываемого документа (до момента выдачи запроса системой безопасности) ?

В прил. есть все для имитации способа (пост № 3).
Уверен, его возможно допилить.
Вложения
Тип файла: zip Personal.zip (10.5 Кб, 12 просмотров)
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
26.06.2012, 07:17
Допустим имеем то же самое, что и в посте 3, но Personal.xls у нас подписан цифровой подписью, а Bad.xls - нет. В этом случае Bad.xls загрузится без запуска макросов, мы можем из Personal.xls исследовать код через VBProject в Bad.xls, после чего, если он безвреден, подписать его программно и перезапустить. Как подписать xls программно, я пока не знаю.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.06.2012, 20:14  [ТС]
Да программа должна все это делать, а не человек. Поэтому не вариант.

Запуск абсолютно любого документа -> перехват этой программой, анализ, выдача юзеру на экран сообщения о подозрительных командах в макросе (причем с указанием конкретно каких). Вопрос у пользователя "продолжать ли открытие этого файла" ...

Добавлено через 5 часов 8 минут
Дело в том, что Presonal.xls не нужно подписывать. Он и так запускается без спроса у пользователя (вот в чем фишка).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2012, 20:14
Помогаю со студенческими работами здесь

Перехват вывода приложения запущенного с правами администратора
Добрый день, собственно сабж. Запускаю приложение с повышенными правами доступа получаю так SHELLEXECUTEINFO ExecuteInfo; ...

Перехват HTTPS трафика андроид приложения, запущенного на эмуляторе
Понадобилось узнать, что и куда шлет андроид приложение. Разработкой под андроид не занимался, поэтому малограмотен в этом деле. С какого...

Перехват вывода консольного окна, запущенного другой программой
Привет всем барсикам :) и заглянувшим в тему ! Есть программа, которая создает консольное окно, выполняет в нем команды и сразу...

Проверка запущенного приложения
Как можно проверить запущено ли приложение или нет. Пробовал такой код: Process processList; processList =...

Блокировка запущенного приложения
Здравствуйте. Необходимо написать программу, через которую создаётся ярлык на стороннее приложение. По этому ярлыку запускается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru