Возможно ли изменять параметры безопастности макросов при помощи кода?
Проблемма в том, что проги разъезжаются по филиалам, а оттуда приходят
притензии типа:
"Твоя прога не работает!!! Не знаю почему!? Просто даже не
запускается!!!"...
...в 100% случаев оказывается, что у них стоит высокая безопасность
макросов...
...и они ее даже переключить не могут ;-))
Необходимо программно изменить параметры безопастности офисного приложения. Можно ли это сделать программно?
Проблемма в том, что проги разъезжаются по филиалам, а оттуда приходят
притензии типа:
"Твоя прога не работает!!! Не знаю почему!? Просто даже не
запускается!!!"...
...в 100% случаев оказывается, что у них стоит высокая безопасность
макросов...
...и они ее даже переключить не могут ;-))
народ, так как задачка не моя (встала перед многими известным и уважаемым XTremAll'ом, у которого сейчас нет выхода в инет и с которым общаюсь при помощи мобильника и халявных SMS с сайтов), пришли мы к выводу, что лучше всего нам проще всего вылавливать окно с сообщением о макросах и инициировать "клик" по нужной кнопке.
Тоесть, встаёт вопрос, как енто можно сделать?
Тоесть, или как узнать HWND этого окна, или SendKey ему послать, ну, естественно, или как вообще программно эту защиту послать куда подальше?
народ, так как задачка не моя (встала перед многими известным и уважаемым XTremAll'ом, у которого сейчас нет выхода в инет и с которым общаюсь при помощи мобильника и халявных SMS с сайтов), пришли мы к выводу, что лучше всего нам проще всего вылавливать окно с сообщением о макросах и инициировать "клик" по нужной кнопке.
Тоесть, встаёт вопрос, как енто можно сделать?
Тоесть, или как узнать HWND этого окна, или SendKey ему послать, ну, естественно, или как вообще программно эту защиту послать куда подальше?
Народ. сегодня получил от XTremAll'а следующее сообщение:
Через Спай нашел класс окна ...
Не знаешь как можно его использовать для получения Хендла?
Я перерыл половину ВинАПИ - не нашел...(может не заметил ;-))
Кстати!
Это окно не является дочерним для офиса!!!
Может кто что-нить подскажет. XTremAll - то тут, когда у него был инет, многим помогал...
Народ. сегодня получил от XTremAll'а следующее сообщение:
Через Спай нашел класс окна ...
Не знаешь как можно его использовать для получения Хендла?
Я перерыл половину ВинАПИ - не нашел...(может не заметил ;-))
Кстати!
Это окно не является дочерним для офиса!!!
Может кто что-нить подскажет. XTremAll - то тут, когда у него был инет, многим помогал...
У меня сейчас небольшой завал на работе, поэтому не могу сам долго рыскать, но помойму менять уровень безопасности программно можно было, иначе как макро-вирусы работают, может это правда относится к офису97, а в 2000 и 2002 уже запретили, то тогда конечна для универсальности надо искать другой вариант...
Насчет SendKey - MsgBox который выскакивает с предупреждением является диалоговым окном и поэтому должен иметь фокус и никуда его не отдавать, так что можно легко использовать SendKey.
Насчет hWnd и класса окна. Если класс окна известен и он достаточно уникален, то получать hWnd можно так:
' ищем по классу
hwnd = FindWindow("XLMAIN", vbNullString)
' ищем по классу и заголовку
hwnd = FindWindow("XLMAIN", "Microsoft Excel - Книга1")
Но так мы найдем токо окна верхнего уровня, а если это окно дочернее, то надо спускаться по дереву (через Spy++ это хорошо можно увидеть):
hwnd = FindWindow("XLMAIN", vbNullString)
hwnd1 = FindWindowEx(hwnd,ByVal 0&, "ReBarWindow32", vbNullString)
hwnd2 = FindWindowEx(hwnd1,ByVal 0&, "ComboBoxEx32", vbNullString)
Переменная ByVal 0& - можно использовать если необходимо перебрать все дочерние окна по кругу (имеется по текущей ветке дерева, а не те дочерние, которые еще ниже находятся)
Объявления:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Сейчас переправлю SMS-ками к XTremAll'у. Если у него возникнут ещё вопросы - сюда выложу.
SMS-ка, ну ты гигант ;)
Чтож, приходится... Ну сегодня, надеюсь, у него появтися выход в инет...
Чтож, приходится... Ну сегодня, надеюсь, у него появтися выход в инет...
Вот что мне написал XTremAll:
HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Security\Level
Изменяется в диапазоне от 1 до 3...
1 - низкая безопасность
2 - средняя
3 - высокая
...и это офис ХР!!! Вота какая у них защита!!!!!!
Еще одно:
все это надо делать с незапущеным офисом
:D
Делается это через цифровой сертификат. Можно добавить в свой проект цифровой сертификат самой микрософт (т.е. проект будет подделываться под родной), а для такого своего микрософтсткого сертификата не нужно даже добавлять в Excel в всписок доверенных сертификатов, потому что он по умолчанию пропустится системой безопасности как свой. Такой своеобразный бэкдор для себя ребята из микрсофта оставили.
Прикол состоит в том, что утилита по созданию такого цифрового сертификата поставляется вместе с офисом. Вообщем попробую дома поискать эту статейку...
Ты знаешь, тут где-то читал (в Хакере что ли), что есть еще альтернативный вариант открытия книги с макросами без их блокировки и ИЗМЕНЕНИЯ уровня безопасности.
Делается это через цифровой сертификат. Можно добавить в свой проект цифровой сертификат самой микрософт (т.е. проект будет подделываться под родной), а для такого своего микрософтсткого сертификата не нужно даже добавлять в Excel в всписок доверенных сертификатов, потому что он по умолчанию пропустится системой безопасности как свой. Такой своеобразный бэкдор для себя ребята из микрсофта оставили.
Прикол состоит в том, что утилита по созданию такого цифрового сертификата поставляется вместе с офисом. Вообщем попробую дома поискать эту статейку...
М..да... Мелкософт хорошо защищает свои проги....:D :D :D
М..да... Мелкософт хорошо защищает свои проги....:D :D :D
Воо нашел: http://www.vbnet.ru/article/showarticle.asp?id=102
Да, прикольно.
Но всё же из внешнего приложения подправить реестр, а потом запустить макрос гораздо скрытнее и интереснее.;)
Да, прикольно.
Но всё же из внешнего приложения подправить реестр, а потом запустить макрос гораздо скрытнее и интереснее.;)
Да, но проблема если офис уже запущен - не закрывать же его на глазах у изумленного пользователя :)
Да, но проблема если офис уже запущен - не закрывать же его на глазах у изумленного пользователя :)
Ну это верно. Хотя, у варианта правки реестра есть и свои плюсы;)
- "ДОВЕРЯТЬ ДОСТУП К VISUAL BASIC PROJECT" - кто знает, как до нее добраться программно???
Следил за Excel что он делает с реестром во время установки этого флажка, но ничего не понял, уровень безопасности там реально видно как меняется, все это отслеживается, попутно он начинается копаться в ветвях:
HKCU/Software/Microsoft/VBA/Trusted
HKCU/Software/Policies/Microsoft/VBA/Trusted
но там в итоге пусто
где же Excel хранит значение этого флажка?
В продолжении правки реестра. В OfficeXP появилась еще одна напасть, которая не дает программно получить доступ к модулям проекта Excel, это галка
- "ДОВЕРЯТЬ ДОСТУП К VISUAL BASIC PROJECT" - кто знает, как до нее добраться программно???
Следил за Excel что он делает с реестром во время установки этого флажка, но ничего не понял, уровень безопасности там реально видно как меняется, все это отслеживается, попутно он начинается копаться в ветвях:
HKCU/Software/Microsoft/VBA/Trusted
HKCU/Software/Policies/Microsoft/VBA/Trusted
но там в итоге пусто
где же Excel хранит значение этого флажка?
У меня такая мысля. Есть масса прог - деинсталяторов, которые, после активации, ведут полный лог всех действий на ПК над реестром, файлами важными и т.п. Вот такой-то прогой можно и воспользоваться. Найти одну из этой серии, установить, активировать, поменять параметры, отменить параметры, дезакитвировать, проглядеть лог. Тама будет как раз всё написано.;)
Совсем старый стал, наверное понедельник (вернее бурно проведенные выходные), у меня же шампунь есть, ща посмотрим что он там делает ...
;) :D :D :D :D :D :D
HKEY_USERS\........\Software\Microsoft\Office\10.0\Excel\Security\AccessVBOM
Там где точки (я просто не стал его копировать, длинный, длинный цифровой ключ), это я так понял уник. ключ и соответственно на каждом компе он будет свой... как бы тогда дорбраться до ключа AccessVBOM, все что ли перебрать, которые есть в HKEY_USERS (их там 3: .DEFAULT и еще один вспомог.)?
Так, ну нашел я где он правит, вообщем это:
HKEY_USERS\........\Software\Microsoft\Office\10.0\Excel\Security\AccessVBOM
Там где точки (я просто не стал его копировать, длинный, длинный цифровой ключ), это я так понял уник. ключ и соответственно на каждом компе он будет свой... как бы тогда дорбраться до ключа AccessVBOM, все что ли перебрать, которые есть в HKEY_USERS (их там 3: .DEFAULT и еще один вспомог.)?
Ну Вы парни даёте, клевая тема и реализации прикольные, сразу видно флудерыы:D :D :D :D :D :D Так держать!!!!:D :D :D
P.S. Думаю, если все получится выложу здесь как исходники (модуль с необх. функциями), так и готовую универс. программку, которую можно будет легко настроить на установку любых макросов.
Ссылочка поменялась на http://www.vbnet.ru/articles/showarticle.aspx?id=102