Autocad vba не установлен вызовите программу установки
Здесь вы можете скачать документацию и программы для САПР AutoCAD, PCAD, 3DS, Inventor, Pro/E, Solidworks и других CAD CAM CAE EDA GIS
Урок 2. Начало работы с VBA
Установка VBA в AutoCAD
Вы слышали что AutoCAD R14 и 2000 содержат новый опциональный язык программирования — VBA (Visual BASIC for Applications). Но как только Вы загружаете его, Вы поражаетесь огромному количеству окон и опций меню, не совсем соответсвующим вашим представлениям о новом языке программирования. Некоторые специалисты в AutoLISP или других языках программирования. Однако я ручаюсь, что VBA не настолько сложен, как кажется. Когда вы закончите читать это руководство, Вы будете знакомы с VBA и его средой разработки. Вы также создадите простое VBA-приложение. Ну что, готовы? Давайте начинать.
Откройте VBA IDE (Integrated Development Environment). Из меню AutoCAD Tools, выберите Macros|Visual Basic Editor.
Изучение интерфейса VBA
Прграммирование на VBA очень отличается от программировнаия на AutoLISP, и одним из самых больших отличий является среда программирования. AutoLISP не имеет встроенной среды программирования — вы должны использовать текстовый редактор, что бы создавать и редактировать код. Когда приходит время отладки, вы ограничены установкой команды печати в вашем коде для отображения текущего состояния программы и переменных. Существуют программы, которые позволяют сделать этот процесс более легким, но их нужно приобретать отдельно.
VBA, с другой стороны, идет с всеми этими функциями, которые являются встроенные. VBA IDE включает редактор кода, конструктор форм, и отладчик в одном пакете. Из меню AutoCAD Tools, выберите Macros|Visual Basic Editor. Когда отобразиться VBA IDE, Вы увидите массив меню, кнопок и окон.
Сначала найдите окно с названием. Это Обозреватель проектов Project Explorer (справа). Подобно как Windows Explorer отображает все файлы и каталоги на вашем жестком диске и помогает вам находить и работать со специфическими файлами, Project Explorer отображает все формы и модули с кодом в вашем проекте и помогает вам находить и работать со специфическими формами или модулями.
Рис. 2. Project Explorer
Вы увидете три папки: AutoCAD Objects, Forms, и Modules. Когда вы добавляете форму или модуль к вашему проекту, VBA добавляет их к соответствующей папке.
В AutoCAD 2000, папка AutoCAD objects содержит объект ThisDrawing, который автоматически присоединяется к AutoCAD.
Все перечисленные окна помогают вам работать с формами. Формы — ваш основной интерфейс с пользователем. Там, где вы использовали диалоговые окна в программе на AutoLISP, вы используете формы в VBA.
В дополнении, в любое время вы можете спросить у пользователя более чем две или три части информации, поскольку формы воспринимаются быстрее чем сообщения в командной строке. Мы используем формы, что бы позволить пользователю решить, какую информацию отображать.
Оформление внешнего вида программы на VBA
Откройте меню Insert menu и выберите UserForm. Появяться два новых окна. Первое, называемое Project-UserForm1 (UserForm), это конструктор форм. Вы должны использовать его для графического конструирования форм. Второе окно, называемое Toolbox, содержит различные объекты, которые вы можете добавить к форме.
Прежде всего, посмотрите на новое имя формы: UserForm1. Каждый VBA-проект, каждая форма и модуль внутри проекта, и каждый объект и каждый объект в каждой форме имеет свое имя. Когда вы начинаете проект, добавляете новую форму к проекту, или добавляете новый объект к форме, VBA создает имя по умолчанию. Я думаю, что вы будите изменять эти имена на другие, что нибудь значащие для вас. Нажмите правой кнопкой мыши на Project в Project Explorer и выберите Project Properties из всплывающего меню. Измените имя проекта на VbaDemo и нажмите на OK.
Рис. 3. Меню Properties
Прежде всего, найдите окно с названием Properties (справа). Я хочу Вам напомнить, большинство объектов имеют свойства, которые определяют внешний вид объекта. Окно window позволяет вам легко устанавливать эти свойства. Прямо сейчас, падающее меню вверху окна должно отображать UserForm1 UserForm. Падающее меню содержит каждый объект, который вы расположили на форме. Ниже падающего меню находится длинный список свойств формы: заголовок, высота, вершина и много других. Левая сторона перечисляет каждое свойство, а правая показывает значение каждого свойства. Найдите свойство Name и измините его на MainWin. Заметьте, что Project Explorer обновляет имя формы.
Теперь, найдите свойство Caption и установите его в VBA Demo. Посмотрите заголовок формы в конструкторе форм после того как вы изменили его — оно измениться автоматически. Если вы когда-либо разрабатывали диалоговые окна используя AutoCAD DCL, вы должны оценить, насколько просто создавать формы в VBA.
Рис. 4. Меню Toolbox
Теперь вы готовы углубиться в Toolbox (ниже слева) и спроектировать свою собственную форму. Чтобы добавить управление к вашей форме, кликните на иконке в панели инструментов Control, а затем кликните на форме. Если Вы не уверены, какой вид управления представляет определенная кнопка в пaнели инструментов Control, подведите курсор мыши на несколько секунд к иконке, и тогда отобразиться описание того, что собой представляет данная иконка. Верхняя левая точка иконки расположиться в той точке, на которую вы укажете в форме. Вы можете изменить размер иконки управления перемещая любой из его углов или граней, точно так же как Вы мог бы изменять размеры Проводника Windows.
Рис. 5. Общий вид формы
Вы можете также установить его свойста Top, Left, Height, и Width в окне свойств (Properties). Дале добавте две командные кнопки к форме. Измените имя первой кнопки на SayHello и ее заголовок на Say Hello, а затем измените имя второй кнопки на AskQuestion и ее заголовок на Ask a Question. Ваша первая форма должна быть похожа на ту, которая показана на рисунке 5.
Работа с пользователем.
Теперь, когда интерфейс с пользователем завершен, вам нужно добавить немного кода за сценой. VBA в AutoCAD R14.01 и R2000 имеет встроенную связь с AutoCAD, в отличие от R14, где нужно вручную подключать VBA к AutoCAD.
Я знаю, это не имеет смысла В конце концов, вы всегда запускаете внутри AutoCAD и вы никогда не должны были это делать с AutoLISP! Но VBA не специфическая для AutoCAD среда. Одно VBA-приложение может управлять любым количеством поддерживающих VBA приложений.
К примеру, вы можете использовать VBA для того, что бы сформировать перечень материалов, извлекая атрибуты из вашего чертежа, и соформировать затем таблицу в Excel. Вы так же можете использовать AutoCAD VBA среду что бы создавать приложения, которые не связаны с AutoCAD. Как всегда, добавление гибкости означает добавление работы, к счастью, эта работа не слишком напряжена.
Прежде всего, кликните правой кнопкой на форме и выберите View Code из всплывающего меню. Это откроет редактор кода. Хотя на первый взгляд редактор кода похож на обыкновенный текстовый редактор, на самом деле он — намного большее.
Посмотрите на два падающих меню в верхней части редактора. Падающее меню Objects слева — это перечень всех объектов, которые вы расположили в форме. Падающее меню Events справа — это перечень каждого события для вашего текущего объекта. Когда вы выбираете объект, редактор кода автоматически добавлет подпрограмму обработки событие по умолчанию для этого объекта. Когда вы выбираете событие, редактор автоматически добавляет подпрограммку поддержки этого события вместе с любыми требуемые аргументами.
По мере того как Вы набираете код, редактор делает много работы для Вас. Если Вы ссылаетесь на стандартную для VBA процедуру, редактор отображает подсказку которая перечисляет стандартный для данной процедуры синтаксис. По мере того как вы перемещаетесь со строки на строку, редактор подсвечивет определенным цветом ключевые слова, коментарии, и так же проверяет каждую строку на синтаксические ошибки. В дополнении, вы можете перемещаться к странице со справкой, просто переместив курсор к месту вызова метода и затем нажав F1 Хотя эта деятельность может казаться навязчивой сначала, вскоре Вы найдете это чрезвычайно полезным. Я настолько привык к этому, что, когда я изменяю старый AutoLISP-код, мне необходимо некоторое время, что бы привыкнуть что код не окрашивается и не проверяется тут же.
Я уверен что Вы стремитесь видеть все это в действии. Выберите General из падающего меню Objects и Declarations из падающего меню Events, и затем добавьте следующие переменные для образования связи:
Private ThisApplication As Object
Далее выберите объект UserForm и его событие Initialize. Событие — это специальный тип метода, который запускается когда что-нибудь случается в объекте. В этом случае, событие Initialize включает отображение формы. Добавьте следующий код:
On Error Resume Next Set ThisApplication = _ GetObject(,"AutoCAD.Application") If (Err.Number <> 0) Then MsgBox "Unable to connect to AutoCAD!" Unload Me End If
‘On Error Resume Next’ говорит VBA переместиться на следующую инструкцию всякий раз, когда произойдет ошибка. без этой строки приложение будет остановлено и отобразиться диалоговое окно с сообщением об ошибке.
Вызов GetObject осуществляет попытку соединиться с выполняемы сеансом AutoCAD. Если это невозможно , происходит ошибка. Таким образом, немедленно после попытки, ваше приложение должно проверить, было ли это успешно. Если нет, необходимо дать знать об этом пользователю, а затем выгрузить форму. Процесс выгрузки формы автоматически завершает приложение.
Также, как ваше приложение нуждается в помощи при соединении с AutoCAD, оно должно сообщить о том, когда оно разорвет связь с AutoCAD. Выберите событие Terminate в объекте UserForm и наберите:
Set mappAcad = Nothing
Это освободит соединение.
Если вы используете AutoCAD 14.01 или 2000, вы можете удалять весь код что вы набрали. Как я упомянул, Вы имеете встроенный объект ThisDrawing который представляет текущий чертеж. Он имеет свойство Application которое вы можете использовать для вызова любых методов объекта Application.
Получение ответа
После того как вы подключились к AutoCAD, вам необходимо добавить немного кода к вашему приложению что бы оно занало, что делать, когда пользователь что-то делает. Сделайте двойной щелчек мыши на кнопке SayHello в вашей форме. Обратите внимание что ваш редактор кода перемещается к событию Click кнопки. Это событие по умолчанию для управления кнопкой. Если вы желаете немного другое событие, Вы можете просто выбрать его из правого падающего списка.
Когда пользователь нажимает на кнопку SayHello, VBA0-программа должна отобразить окном сообщений, с надписью «Hello!». VBA имеет метод, который достаточно соответствует этому — MsgBox, который только это и делает. Добавьте следующий код к событию по нажатию (Click) для SayHello:
MsgBox "Hello!"
Как минимум, вы дадите для MsgBox сообщение для отображения, но этот метод может больше, если ему дать больше информации. К примеру, он может задать вопрос пользователю и сообщить его вам. Выберите AskQuestion из меню Object в редакторе кода; редактор снова предположит что вам нужно событие Click. Добавьте следующий код:
If (MsgBox("Is it raining out?", _ vbYesNo, "Hey, Weatherman!") = vbYes) _ Then MsgBox "Better close the window!" Else MsgBox "Enjoy the nice day!" End If
Как и в предыдущем случае, первый аргумент для MsgBox — сообщение для отображенияy. The Второй аргумент сообщает MsgBox что бы оно отобразило кнопки Yes и No прежде чем кнопку OK. Третий аргумент сообщает MsgBox как озаглавить диалог.
Когда вы укажите MsgBox отобразить кнопки Yes и No, вы можете проверить код возврата что бы определить, какую кнопку нажал пользователь. Если возвращаемое значение эквивалентно встроенной константе vbYes, пользователь нажал кнопку Yes. И как вы можете догадаться, нажатие кнопки No будет возвращать значение vbNo.
Готовы видеть результаты ваших усилий? Запустите программу на выполнение выбрав Run из меню Run. Ваша форма отобразиться в окне AutoCAD, и выступающие кнопки будут настаивать на ответе. Немного поотвечайте на вопросы, а затем возвращайтесь, когда вы утомитесь отвечать на вопросы.
Ваше приложение прочти закончено, но оно не содержит одной важной детали. Приложение запускается из среды разработки VBA, но как оно будет загружаться внутри AutoCAD? Никакие силы не заставят без этой детали запуститься приложению из командной строки AutoCAD. Что бы это сделать, вам необходим метод-помощник. Откройте в VBA меню Insert и выберите Module. Измените имя модуля на AppStuff, и введите следующий код в редакторе:
Public Sub VbaDemo() MainWin.Show End Sub
Сохраните ваш VBA-проект, затем переключитесь в командную строку AutoCAD и наберите vbarun AppStuff.VbaDemo. Ваша форма отобразилась на экране! Перейдем к следующему уроку.
Автозагрузка и выполнение процедур AutoLISP
Загрузите процедуры AutoLISP при запуске программы и выполняйте команды или функции во время работы с чертежом.
Программы на основе AutoCAD автоматически загружают содержимое трех определяемых пользователем файлов, acad.lsp, acaddoc.lsp и файла MNL, связанных с текущим файлом адаптации.
По умолчанию загрузка файла acad.lsp производится один раз в начале нового сеанса программы, в то время как загрузка файла acaddoc.lsp производится для каждого документа (или чертежа). Это позволяет связать загрузку файла acad.lsp с запуском приложения, а загрузку файла acaddoc.lsp с открытием документа (или чертежа). Описанный способ загрузки можно изменить, модифицировав значение системной переменной ACADLSPASDOC.
Если в одном из этих файлов определена специальная функция S::STARTUP , она автоматически исполняется сразу же после инициализации чертежа. Кроме того, перечень приложений для автоматической загрузки можно выбрать с помощью параметра ЗАГПРИЛ. В последнем случае редактирование файлов не требуется.
Файлы автозагрузки acad.lsp и acaddoc.lsp не поставляются с программными продуктами на основе AutoCAD. При необходимости пользователь должен создать их самостоятельно.
Прим.: Начиная с продуктов на базе AutoCAD 2014, пользовательские приложения должны работать в безопасном режиме; в этом случае системной переменной SECURELOAD установлено значение 1 или 2. В безопасном режиме работа программы будет ограничена загрузкой и выполнением файлов, содержащих код из доверенных источников. Пути к доверенным источникам определяются системной переменной TRUSTEDPATHS.
Автозагрузчик команд
При загрузке файла AutoLISP определения команд в файле занимают определенный объем памяти даже в том случае, если команды не используются. Функция autoload языка AutoLISP позволяет сделать команду доступной без загрузки ее кода в память. Добавление следующих выражений в файл acaddoc.lsp вызывает автоматическую загрузку команд КОМАНДА1, КОМАНДА2 и КОМАНДА3 из файла cmds.lsp и команды НОВАЯКОМ из файла newcmd.lsp.
(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) (autoload "NEWCMD" '("NEWCMD"))
При первом вводе в командной строке имени автоматически загруженной команды AutoLISP загружает полное определение этой команды из соответствующего файла. В AutoLISP также имеется функция autoarxload для приложений ObjectARX.
Прим.: Если существует несколько файлов автозагрузки AutoLISP с одинаковыми именами, загружается тот из них, который имеет наиболее поздний штемпель даты и времени. То же самое происходит при загрузке файлов с расширениями LSP, если не указано полное имя файла (с расширением).
Файл ACAD.LSP
Пользователь может создать файл acad.lsp для регулярного использования программ на AutoLISP. При запуске AutoCAD производится поиск файла поддержки acad.lsp. Если файл acad.lsp найден, он загружается в память.
Это связано с тем, что файл acad.lsp предназначен для автозагрузки специальных приложений. Поэтому все переменные и функции, определенные в файле acad.lsp, доступны только для самого первого чертежа. Если требуется, чтобы некоторые процедуры были доступны для всех открываемых документов, их следует поместить в файл acaddoc.lsp.
Режимом загрузки файлов acad.lsp и acaddoc.lsp можно управлять с помощью системной переменной ACADLSPASDOC. Если для системной переменной ACADLSPASDOC задано значение 0 (значение по умолчанию), файл acad.lsp загружается только один раз: при запуске приложения. Если она равна 1, файл acad.lsp загружается при создании нового чертежа или открытии существующего файла чертежа.
В файле acad.lsp может размещаться код AutoLISP одной или нескольких процедур или только последовательность вызовов функции load . Последний способ более предпочтителен, так как при этом упрощается возможная модификация перечня загружаемых процедур и приложений. Если следующий код сохранить как файл acad.lsp, файлы mysessionapp1.lsp, databasesynch.lsp и drawingmanager.lsp будут загружаться при каждом запуске программы.
(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")
Прим.: Не изменяйте зарезервированный файл acad.lsp. В программе Autodesk имеется файл acad.lsp, который содержит функции на языке AutoLISP, описанные специально для этой версии. Данный файл загружается в память непосредственно перед загрузкой файла acad.lsp. обозначает версию программы на основе AutoCAD. Например, acad2022.lsp является файлом, загруженным программами на основе AutoCAD 2022 .
Файл ACADDOC.LSP
Файл acaddoc.lsp предназначен для выполнения инициализации каждого документа (чертежа). Этот файл удобно использовать для автоматической загрузки библиотек AutoLISP-процедур при создании нового чертежа или открытии имеющегося.
Каждый раз при открытии чертежа программа AutoCAD производит поиск файла acaddoc.lsp по библиотечному пути. При обнаружении такого файла производится его загрузка в память. Файл acaddoc.lsp всегда загружается вместе с каждым чертежом независимо от значения ACADLSPASDOC.
В большинстве случаев пользователю достаточно иметь один файл acaddoc.lsp для всех AutoLISP-процедур, работающих непосредственно с документами. Программа выполняет поиск файла acaddoc.lsp в порядке, заданном в стандартных библиотечных путях. Поэтому при работе с различными типами чертежей в каждой папке с чертежами можно хранить свой файл acaddoc.lsp для загрузки требуемого набора процедур AutoLISP.
В файле acaddoc.lsp может храниться код для одной или нескольких процедур или серии запросов функции load . Последний способ более предпочтителен, так как при этом упрощается возможная модификация перечня загружаемых процедур и приложений. Если приведенный ниже код сохранить как файл acaddoc.lsp, файлы mydocumentapp1.lsp, build.lspи counter.lsp будут загружаться каждый раз при открытии нового документа.
(load "mydocumentapp1") (load "build") (load "counter")
Прим.: Не изменяйте зарезервированный файл acaddoc.lsp. В программе Autodesk имеется файл acaddoc.lsp, который содержит функции на языке AutoLISP, написанные специально для этой версии. Данный файл загружается в память непосредственно перед загрузкой файла acaddoc.lsp. Параметр обозначает версию программы на основе AutoCAD. Например, acaddoc2022.lsp является файлом, загруженным программами на основе AutoCAD 2022 .
Адаптация файлов MNL и меню AutoLISP
Во время загрузки файла адаптации (CUI/CUIx) программа выполняет поиск файла MNL с таким же именем. При обнаружении нужного файла производится его загрузка в память. Данный механизм позволяет обеспечить загрузку функций AutoLISP, необходимых для работы элементов интерфейса пользователя.
Например, файл адаптации acad.cuix выполняет поиск файла acad.mnl, который может определить различные функции AutoLISP, используемые элементами пользовательского интерфейса в файле адаптации. MNL-файл загружается после файла acaddoc.lsp.
Прим.: Если файл адаптации загружается с помощью функции command на языке AutoLISP, которая имеет формат (command «меню» «новое меню») , то соответствующий файл MNL загружается только после запуска всей процедуры AutoLISP.
(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)
В данном примере для выдачи сообщения использована функция princ . При первом обращении к функции princ в командной строке отображается следующий текст:
Утилиты «новое меню»… загружены.
Второй вызов princ используется для завершения функции AutoLISP. Без второго вызова princ сообщение в командной строке появится дважды. Как уже упоминалось ранее, можно использовать аргумент при_ошибке при вызове функции load для повышения надежности процедур.
Функция S::STARTUP: выполнение после завершения инициализации чертежа
Для выполнения операций по настройке после инициализации чертежа можно написать функцию S::STARTUP.
Все автоматически загружаемые файлы LISP (acad.lsp, acaddoc.lsp и MNL) размещаются в памяти до завершения полной инициализации чертежа. Обычно это не создает проблем, за исключением тех случаев, когда используется функция command ; надежная работоспособность данной функции возможна только после завершения инициализации чертежа.
Если функция S::STARTUP , определенная пользователем, содержится в файлах acad.lsp, acaddoc.lsp или MNL, то она выполняется при каждом создании нового чертежа или открытии имеющегося. Таким образом, для выполнения операций по настройке можно создать функцию S::STARTUP и поместить ее в автоматически загружаемый файл AutoLISP.
Пусть, например, требуется переопределить стандартную команду ШТРИХ таким образом, чтобы при вводе ее имени вызывалась команда КШТРИХ и выдавалось соответствующее сообщение. Для этого в файл acaddoc.lsp нужно добавить следующий код:
(defun C:HATCH ( ) (alert "Using the BHATCH command!") (princ "\nEnter OLDHATCH to get to real HATCH command.\n") (command "BHATCH") (princ) ) (defun C:OLDHATCH ( ) (command ".HATCH") (princ) ) (defun-q S::STARTUP ( ) (command "undefine" "hatch") (princ "\nRedefined HATCH to BHATCH!\n") )
Перед завершением инициализации чертежа с помощью функции defun задаются новые описания команд ШТРИХ и ВСТРШТРИХ. После завершения инициализации чертежа вызывается функция S::STARTUP , которая отключает стандартное описание команды ШТРИХ.
Прим.: Для того чтобы функция S::STARTUP не переопределяла функции с таким же именем из других файлов, ее следует определить с помощью функции defun-q , а не defun .
Так как функция с именем S::STARTUP может быть определена в различных файлах (acad.lsp, acaddoc.lsp, файлах MNL или любых других файлах AutoLISP), то определенную ранее функцию S::STARTUP можно переопределить.
В следующем примере приводится способ определения данной функции, позволяющий избежать подобных ситуаций.
(defun-q MYSTARTUP ( )
. автоматически выполняемая функция .
) (setq S::STARTUP (append S::STARTUP MYSTARTUP))
В результате такого определения код предыдущей загруженной функции S::STARTUP добавляется к коду новой функции S::STARTUP . Этот способ определения можно использовать независимо от ранее существовавшей функции S::STARTUP .
На уровень выше: Приложения AutoLISP
Понятия, связанные с данным
- Приложения AutoLISP
- Загрузка приложений AutoLISP
- Предотвращение ошибок AutoLISP при выполнении файлов автозагрузки
- Установка и удаление приложений подключаемого модуля
- Поддерживаемые интерфейсы программирования
Autocad 2017 не запускается VBA
Добрый день!
Столкнулся с такой проблемой при установки AUTOCAD 2016 и 2017.
Скачал с оф.сайта «AutoCAD_2017_VBA_module_Win_64bit_dlm.sfx», установил, везде показывает что VBA Enabler установлен, но при запуске «Запустить Макрос VBA» пишет сообщения и не хочет ничего запускать.
Кто нибудь сталкивался с подобной проблемой, 4 часа сегодня потратил на все установки и переустановки, ничего не помогает =\ подскажите пожалуйста.
Просмотров: 12020
LISP, C# (ACAD 200[9,12,13,14])
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Доступа на Яндекс.Диск нет. К посту не приложить ничего, что ли?
__________________
Моя библиотека lisp-функций
—
Обращение ко мне — на «ты».
Все, что сказано — личное мнение.
Кулик Алексей aka kpblc |
Посмотреть профиль |
Посетить домашнюю страницу Кулик Алексей aka kpblc |
Найти ещё сообщения от Кулик Алексей aka kpblc |
ADN Open CIS
Сообщество программистов Autodesk в СНГ
Последовательность загрузки приложений в AutoCAD с учетом SECURELOAD
В продолжение темы «Последовательность загрузки приложений в AutoCAD» хотелось бы осветить вопрос о безопасности и о шагах, предпринятых Autodesk в этом отношении.
- acad.lsp/fas/vlx
- acaddoc.lsp/fas/vlx
- acad.dvb
Иногда также можно было встретить файлы acad20XX.lsp или acad20XXdoc.lsp (XX означают последние 2 цифры версии AutoCAD). Эти файлы «зарезервированы» для использования самим AutoCAD.
Если в одном каталоге обнаруживается одновременно acad.vlx, acad.fas и acad.lsp, то загружается только acad.vlx; остальные файлы игнорируются.
Если AutoCAD обнаруживает сразу все 7 файлов (т.е. acad.lsp; acad.fas; acad.vlx; acaddoc.lsp; acaddoc.fas; acaddoc.vlx; acad.dvb), то загружаются только первые обнаруженные *.vlx-файлы и acad.dvb.
Тем не менее, следует отдавать себе отчет в такой тонкости: последовательность загрузки определяется тем, где и когда AutoCAD обнаруживает эти файлы. Очевидно, что AutoCAD ищет эти файлы по каталогам, определенным как пути поддержки. Но на самом деле AutoCAD перед ними опрашивает еще и рабочий каталог приложения (определяется в свойствах ярлыка вызова). Рабочий каталог опрашивается только в том случае, если сначала запускается AutoCAD, и открытие файла dwg выполняется из-под AutoCAD’a. Следом идет каталог, в котором находится открываемый файл, и только после этого опрашиваются пути поддержки AutoCAD’a
Сначала загружается обнаруженный acad*.* — файл, а поиск остальных вариантов прекращается. Что это значит?
Например, в каталоге с открываемым dwg-файлом есть файл acad.lsp, а в каталогах поддержки хранятся acad.fas и acad.vlx. AutoCAD при открытии dwg обнаружит acad.lsp, загрузит его и уже не будет опрашивать каталоги поддержки
- acad*.VLX
- acad*.FAS
- acad*.LSP
Файлы acad.lsp, acad.fas, acad.vlx, acad.dvb не поставляются вместе с AutoCAD и разрабатываются самостоятельно пользователями.
Зарезервированные файлы acad20XX.lsp и acad20XXdoc.lsp устанавливаются вместе с AutoCAD и размещаются в каталоге \Support. В 2013 и 2014 версиях эти файлы размещаются в каталогах локализации (например, для AutoCAD 2014 Eng путь будет наподобие \Support\en-us; для русской версии — \Support\ru-ru). acad20XX.lsp и acad20XXdoc.lsp предназначены только для служебных целей внутри AutoCAD, поэтому не следует изменять или создавать такие файлы самостоятельно (о чем, кстати, в документации достаточно четко написано).
Полезные ссылки
- Как обнаружить и удалить вирус acad.vlx
- Сравнение acad*.lsp файлов
- Последовательность загрузки приложений в AutoCAD и ссылки, указанные в ней
Дополнительная информация, которую можно найти в справке
- Файл ACAD.LSP
Вы можете создать файл acad.lsp, если Вы постоянно используете какие-либо специфические скрипты или макросы. При старте AutoCAD ищет этот файл по всем путям (рабочий каталог приложения, каталог текущего документа, пути поддержки). Если файл найден, он загружается в AutoCAD
Важно! Не вносите изменения в файл acad200XX.lsp. В этом файле хранятся функции, которые разрабатывала Autodesk и которые используются внутри AutoCAD’a. Этот файл загружается в AutoCAD до acad.lsp - Файл ACADDOC.LSP
Большинству пользователей достаточно иметь всего один файл acaddoc.lsp для всех lisp-приложений, загружаемых внутрь документа. Поиск файла acaddoc.lsp выполняется точно так же, как и поиск acad.lsp. И точно так же загружается только первый найденный файл, остальные игнорируются. Таким образом, в разных каталогах с dwg-файлами могут лежать разные файлы acaddoc.lsp, загружающие разный код.
Важно! Не вносите изменения в файл acad20XXdoc.lsp. Причины такие же, как и для acad.lsp. Файл acad20XX.lsp загружается в документ перед acaddoc.lsp - Автоматическая загрузка и исполнение VBA
Файл acad.dvb может использоваться, если Вам необходимы какие-либо VBA-макросы внутри каждого документа.
AutoCAD 2013 SP 1
- Новые ключи командной строки acad.exe
- Новые системные переменные
- Изменение правил загрузки acad20XX.lsp и acad20XXdoc.lsp
Новые ключи командной строки acad.exe
Введен новый ключ командной строки — «/nolisp» (естественно, без кавычек). Этот ключ полностью блокирует lisp в AutoCAD (включая lsp, fas и vlx). Не самое удачное решение, поскольку использование этого ключа может блокировать работу некоторых элементов меню (в частности, многие команды из ExpressTools могут отказаться работать). Тем не менее этот ключ может оказаться полезным, если есть подозрения на факт заражения компьютера AutoCAD’овскими вирусами.
Важно! Этот ключ запуска все же предоставляет пользователю возможность поменять порядок загрузки приложений в StartupSuite и новую системную переменную AUTOLOADPATH. Ключ «/nolisp» работает только в текущей сессии AutoCAD’a.
Использование этого ключа автоматически устанавливает новую системную переменную LISPENABLED в 0
Новые системные переменные
Введена новая системная переменная LISPENABLED. Значение устанавливается ключом запуска «\nolisp» (см.выше)
Название | LISPENABLED |
Режим | ReadOnly (только чтение). Не документирована |
Описание | Определяет, будет ли включен lisp для текущей сессии AutoCAD. Регулирует возможность загрузки и исполнения lsp, fas, vlx |
Тип данных | Целое |
Возможные значения | 0 : поддержка lisp отключена 1 : поддержка lisp включена |
Значение по умолчанию | 1 |
Хранится в | Не сохраняется |
Изменение и получение значения | командная строка запуска acad.exe (ключ «/nolisp») getvar — только чтение командная строка AutoCAD — только чтение |
Добавлено еще 2 системные переменные AUTOLOAD и AUTOLOADPATH, указывающие AutoCAD’у, грузить ли автоматически файлы acad.lsp / fas / vlx; и, если грузить — то из каких каталогов
Пользователи могут загружать другие lisp-файлы. AutoCAD 2013 SP1 все еще загружает acad20XX.lsp и acad20XXdoc.lsp (подробнее см.ниже, раздел «Изменение правил загрузки»).
Эти настройки имеют отношение только к автоматически загружаемым файла из разряда определяемых пользоватем (т.е. acad.lsp / fas / vlx; acaddoc.lsp / fas / vlx; acad.dvb).
Название | AUTOLOAD |
Режим | Доступно для изменения. Не документирована |
Описание | Определяет, будет ли AutoCAD искать и загружать lsp / fas / vlx / dvb файлы |
Тип данных | Целое |
Возможные значения | 0 (откл) : автозагрузка файлов acad.lsp/fas/vlx; acaddoc.lsp/fas/vlx; acad.dvb не выполняется 1 (вкл) : файлы acad.lsp/fas/vlx; acaddoc.lsp/fas/vlx; acad.dvb загружаются |
Значение по умолчанию | 1 |
Хранится в | Реестр, ветка текущего профиля (подробнее см.ниже). Ключ AUTOLOAD. Если значение в реестре не обнаружено, значит, системная переменная еще ни разу не изменялась. |
Изменение и получение значения | getvar / setvar Командная строка AutoCAD |
Название | AUTOLOADPATH |
Режим | Доступно для изменения. Не документирована |
Описание | Указывает, откуда AutoCAD будет загружать найденные acad.* и acaddoc.* файлы |
Тип данных | Строка |
Возможные значения | Путь к каталогу / каталогам, где AutoCAD’у следует искать acad.* и acaddoc.* файлы. Если каталогов несколько, то они разделяются символом «;» (точка с запятой). Если введено пустое значение («» или .), то AutoCAD загружает файлы acad.* и acddoc.*, обнаруженные по стандартному механизму |
Значение по умолчанию | «» (пустое значение) или «.» (точка) |
Хранится в | Реестр, ветка текущего профиля (подробнее см.ниже). Ключ AUTOLOADPATH. Если значение в реестре не обнаружено, значит, системная переменная еще ни разу не изменялась. |
Изменение и получение значения | getvar / setvar Командная строка AutoCAD |
Ветка текущего профиля для AutoCAD последних версий в реестре определяется как HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:ZZZZ\Profiles\<Имя профиля>. Большинство перечисляемых в статье системных переменных хранят свое значение в подключе \Variables, но возможно хранение в подключе \General.
Имя>
Изменение системной переменной AUTOLOAD можно отследить по доступности опции «Load acad.lsp with every drawing» (_.options — System):
Установленный / снятый флажок точно так же регулирует значение системной переменной ACADLSPASDOC.
Изменение правил загрузки acad20XX.lsp и acad20XXdoc.lsp
Раньше файлы acad20XX.lsp и acad20XXdoc.lsp рассматривались и загружались как аналоги acad.lsp и acaddoc.lsp (т.е. выполнялась загрузка первого найденного файла с таким именем; поиск осуществлялсь по описанному выше алгоритму). Теперь эти файлы загружаются только из подкаталога установки \Support (например, для AutoCAD 2013 этот путь может быть наподобие %ProgramFiles%\Autodesk\AutoCAD 2013\Support. Еще раз напоминаю — эти файлы предназначены для корректной работы самого AutoCAD и вносить изменения в них не следует.
Вертикальные решения на базе AutoCAD : функциональность, последовательность загрузки и вопросы безопасности — все полностью повторяет уже описанное
AutoCAD для Mac : практически повторяет описанный функционал. Вся разница состоит в том, что AutoCAD для Mac не поддерживает vlx — только lsp и fas (Прим.переводчика: проверить, к сожалению, не могу).
AutoCAD LT / AutoCAD OEM : затронутые вопросы не касаются AutoCAD LT, поскольку в AutoCAD LT не поддерживаются ни эти системные переменные, ни программирование (кроме, пожалуй, минимально доступного функционала на DIESEL)
AutoCAD 2014
- расширение типов файлов, отслеживаемых системной переменной SECURELOAD
- добавлены новые параметры в окно _.options, согласовывающиеся с уже описанными системными переменными AUTOLOAD И AUTOLOADPATH (заменены на SECURELOAD и TRUSTEDPATHS)
- разделение системной переменной AUTOLOADPATH на две: TRUSTEDPATHS и TRUSTEDDOMAINS)
- цифровое подписывание исполняемых файлов (dll, exe, arx, dbx и т.п.)
- определение доверенных путей установки
- дополнительный ключ запуска «/safemode», системные переменные SAFEMODE и SAFEMODEAPPS
- введен новый диалог, появляющийся при попытке загрузки исполняемых файлов, не включенных в каталоги, определенные в TRUSTEDPATHS и / или TRUSTEDDOMAINS
- изменение загрузки CUI[X] и MNL-файлов
- добавлено новое сообщение, появляющееся при попытке назначить в качестве TRUSTEDPATHS каталога, не закрытого на запись
- введена новая lisp-функция findtrustedfile (по аналогии с findfile)
- добавлены новые настройки в мастер развертываний
SECURELOAD и отслеживаемые типы файлов
Настройка AUTOLOAD, появившаяся в AutoCAD 2013 SP1, была обновлена в AutoCAD 2014 и расширила типы файлов, отслеживаемых при загрузке. AUTOLOAD смотрела только за lsp, fas, vlx и dvb файлами, теперь же просматриваются все — arx, lsp, fas, vlx, сборки .NET, dvb (VBA), скрипты и dll JavaScript.
В AutoCAD 2013 системная переменная AUTOLOAD могла иметь только два значения — 0 (отключено) либо 1 (включено). Для AutoCAD 2014 имя системной переменной стало SECURELOAD и она изменила диапазон допустимых значений (см.ниже). AUTOLOAD теперь поддерживать нет особого смысла, т.к. использование ключа «/safemode» выполняет такие же действия, как и перевод AUTOLOAD в 0.
- arx, dbx, crx
- lsp, fas, vlx, mnl
- сборки .NET
- макросы VBA (dvb), acad.rx, acVBA.arx, acad.dvb
- JavaScript
- dll
- scr-файлы (сценарии), расположенные на сетевых ресурсах
acad.rx не является исполняемым файлом, это обычный текстовый файл, определяющий загрузку arx и / или dbx файлов. acad.rx — это еще одно место, которое просматривает AutoCAD для определения, какие файлы надо загружать (наряду с реестром, StartupSuite, автозагрузка и т.п.)
Название | SECURELOAD |
Режим | Доступно для изменения. |
Описание | Определяет, должен ли AutoCAD загружать исполняемые файлы, находящиеся в путях поддержки (рабочий каталог приложения, каталог dwg-файла, пути поддержки, каталог установки приложения) |
Тип данных | Целое |
Возможные значения | 0 : загрузка без каких бы то ни было предупреждений. Полностью повторяет поведение старых (до 2012 включительно) версий AutoCAD 1 : без требования дополнительного подтверждения загружает файлы, находящиеся в TRUSTEDPATHS и / или TRUSTEDDOMAINS. Если системные переменные TRUSTEDPATHS и / или TRUSTEDDOMAINS не установлены, AutoCAD выдает соответствующее предупреждение перед загрузкой файла. Имеет значение для автоматической и ручной загрузки приложений. 2 : без требования дополнительного подтверждения загружает файлы, находящиеся в TRUSTEDPATHS и / или TRUSTEDDOMAINS. Если системные переменные TRUSTEDPATHS и / или TRUSTEDDOMAINS не установлены, не показывает никакого предупреждения. Если загружаемый файл не определен как «доверенный», то в командной строке выдается сообщение об ошибке загрузки (соответствует выбору кнопки [Do not load] в диалоге подтверждения загрузки): File load canceled: |
Значение по умолчанию | 1 |
Хранится в | Реестр, ветка текущего профиля (подробнее см.выше). Ключ SECURELOAD. Если значение в реестре не обнаружено, значит, системная переменная еще ни разу не изменялась. |
Изменение и получение значения | getvar / setvar Командная строка AutoCAD |
TRUSTEDPATHS
Системная переменная AUTOLOAD, появившаяся в AutoCAD 2013, теперь переименована в TRUSTEDPATHS. В качестве доверенных путей гарантированно выступают каталог-владелец файла acad.exe и каталог ApplicationPlugins (используется магазином приложений, или ExchangeApps) и все их подкаталоги
Пользователь может загружать файлы без каких-либо дополнительных запросов, если файлы находятся в одном из «доверенных» каталогов, перечисленных в TRUSTEDPATHS. Указание полного пути к загружаемому файлу ситуацию не изменит. AutoCAD рекурсивно просматривает доверенные пути и все их подкаталоги, и на основании этого решает — является ли загружаемый файл «доверенным» или нет.
Расположение ExpressTools не требуется указывать в TRUSTEDPATHS. То же самое касается и каталогов расположения установленных приложений из ExchangeApps.
TRUSTEDDOMAINS
Это новая системная переменная, введена в AutoCAD 2014, определяет обработку автоматически загружаемых файлов JavaScript
Пользователь может определить несколько URL для серверов с JavaScript. Поддерживаются маскировочные символы (*, #, @ и т.п.)
Изменения в диалоге настроек (_.options)
В раздел «Файлы» окна настроек добавлена новая ветка — Trusted Locations (Доверенные местоположения). Она соответствует текущему значению системной переменной TRUSTEDPATHS.
Примечание: Trusted Domain Locations не внесена в окно настроек (считается, что системная переменная TRUSTEDDOMAINS будет использоваться только разработчиками).
Эти каталоги назначаются как «надежные» (или «доверенные») для исполняемых файлов. Файлы, находящиеся в этих каталогах, загружаются без запроса разрешения. Именно по этой причине рекомендуется назначать доверенными каталогами пути, куда пользователь не имеет права на запись.
Примечание: при попытке вручную назначить в качестве доверенного каталог, куда пользователь имеет право на запись, будет выдано соответствующее предупреждение. Если TRUSTEDPATHS назначается программно, то запрос не появляется.
Trusted Locations (Доверенные местоположения). Диалог параметров AutoCAD
Пользователь может назначить несколько каталогов в качестве «доверенных». Следует помнить, что доверенными автоматически считаются путь установки AutoCAD и все его подкаталоги, и пути приложений, загруженных из ExchangeApps.
При попытке указать в качестве доверенного каталога несуществующий путь, AutoCAD выдаст соответствующее предупреждение.
Примечание. Важно! При указании в качестве доверенного каталога все его подкаталоги автоматически не становятся доверенными. Для обработки всех подкаталогов достаточно указать в конце имени каталога символы «\. » (три точки).
Обработка сообщений о назначении доверенных каталогов
Если пользователь указывает в качестве доверенного каталога доступную для записи папку, то AutoCAD выводит соответствующее предупреждение:
Кнопка | Описание |
Continue | Закрывает окно и возвращает управление окну параметров. Указанный каталог помещается в Trusted Locations (Доверенные местоположения). Эта кнопка установлена по умолчанию активной |
Любой другой способ закрытия окна с сообщением | Закрывает окно и возвращает управление окну параметров. Указанный пользователем каталог не вносится в Trusted Locations (Доверенные местоположения). |
В окне параметров AutoCAD изменениям подверглась вкладка System (Система): появилась новая кнопка [Executable File Settings] (Параметры исполняемых файлов), где собственно и регулируются значения системных переменных SECURELOAD и ACADLSPASDOC:
Три верхние переключателя соответствуют значениям системной переменной SECURELOAD. Нижние два — ACADLSPASDOC.
Если установить SAFEMODE равным 1, то все эти настройки становятся недоступными.
Изменения в установке
CUIx и MNL файлы в версии 2012 и 2013 устанавливались в каталог %AppData%\Autodesk\AutoCAD 20XX — <Полное название языка>\RXX.X\\Support\
Полное>
Теперь MNL файлы при установке помещаются в каталог %ProgramFiles%\Autodesk\AutoCAD 2014\Support\. CUIx после преобразования помещаются в %AppData%\Autodesk\AutoCAD 2014\R19.1\\Support. Туда же копируются MNL-файлы.
Параметр вызова AutoCAD «/safemode»
Ключ «/nolisp», появившийся в AutoCAD 2013, переименован в «/safemode» и теперь обрабатывает не только lsp / fas / vlx, но и вообще все исполняемые файлы, которые можно загрузить в AutoCAD. Использование этого ключа запустит AutoCAD в минимально возможной функциональности и позволит изменить AUTOLOADPATH в параметрах AutoCAD’a. Если AutoCAD запущен с этим ключом, то никакое выполнение кода невозможно.
Примечание: некоторое количество исполняемого кода все равно приходится загружать внутрь AutoCAD для обеспечения его функционирования даже в таком «обрезанном» виде. Перечень таких приложений можно узнать, посмотрев значение скрытой нередактируемой системной переменной SAFEMODEAPPS.
SAFEMODE
Системная переменная LISPENABLED, появившаяся в AutoCAD 2013, переименована в SAFEMODE. Системная переменная предназначена только для чтения и может быть изменена только через ключи запуска AutoCAD.
Название | SAFEMODE |
Режим | Доступно только для чтения |
Описание | Определяет, может ли загружаться исполняемый код (кроме служебного) при старте AutoCAD |
Тип данных | Целое |
Возможные значения | 0 : исполняемый код может быть загружен и запущен 1 : исполняемый код не выполняется |
Значение по умолчанию | 0 |
Хранится в | Не сохраняется, действует только в пределах текущей сессии AutoCAD |
Изменение и получение значения | getvar Командная строка AutoCAD Ключ запуска «/safemode» |
SAFEMODEAPPS
Только для чтения, определяет перечень доверенных приложений, загружаемых в AutoCAD несмотря ни на что
Название | SAFEMODEAPPS |
Режим | Только для чтения |
Описание | Определяет перечень доверенных приложений, загружаемых в AutoCAD, игнорируя ключ «/safemode». |
Тип данных | Строка |
Возможные значения | Перечисление приложений. Имена разделяются символом «;» (точка с запятой) |
Значение по умолчанию | Не документировано |
Хранится в | Реестр, ветка текущего профиля (подробнее см.выше). Если значение в реестре не обнаружено, значит, системная переменная еще ни разу не изменялась. |
Изменение и получение значения | getvar Командная строка AutoCAD |
Новый диалог предупреждения о попытке загрузки недоверенного приложения
Вернемся к описанию системной переменной SECURELOAD: значение по умолчанию — 1. То есть, если AutoCAD пытается загрузить код, находящийся не в доверенных каталогах, будет выводиться окно предупреждения:
Если SECURELOAD равно 0 или 2, диалог не выводится (загружается или нет при этом код — подробнее описано выше).
Предположим, что SECURELOAD равна 1. В таком случае диалог будет появляться при попытке загрузки любого исполняемого кода, не распознанного как «доверенный». Неважно, как выполняется загрузка — вручную или программно.
Если выполняется загрузка сразу нескольких «недоверенных» файлов, то окно будет выводиться для каждого из них.
Если пользователь выберет [Do not load] (Не загружать), то AutoCAD не только не загрузит указанный файл, но и не будет выполнять его поиск по другим каталогам.
Если пользователь хотя бы раз во время одной сесии выберет для какого-то приложения [Load] (Загрузить), то больше диалог с запросом именно этого приложения появляться не будет.
Изменения в загрузке CUIx / MNL
acad.mnl (mnl — это фактически lisp-файл с измененным расширением). Вплоть до AutoCAD 2014 mnl-файлы загружались в AutoCAD сразу за соответствующим файлом меню (mnu / mns / cui / cuix). Например, acad.mnl загружался сразу после того, как был загружен acad.cuix. Множество вирусописателей использовали эту особенность, внося изменения в mnl-файлы.
Очевидно, что такой стиль загрузки приложений больше нельзя назвать приемлемым. AutoCAD 2014 будет загружать mnl файл только в том случае, если mnl файл находится в «доверенном» каталоге. Если mnl не лежит в «доверенном» каталоге, при SECURELOAD = 1 AutoCAD выдаст запрос на загрузку приложения (см.предыдущий раздел). Если SECURELOAD = 2, то диалог не выводится, но и mnl не загружается.
Изменения в мастере создания развертываний
Мастер создания сетевых развертываний был переработан с целью предоставления CAD-менеджерам возможности управлять настройками безопасности прямо в процессе развертывания AutoCAD. В мастер были добавлены новые настройки, аналогичные диалогу Executable Code Settings (для вызова этого диалога в AutoCAD вызовите _.options; закладка System / Система, кнопка Executable Code Settings / Параметры исполняемых файлов).
Новый раздел называется «Executable Code Settings» (Параметры исполняемых файлов).
В мастер также добавлены ветки Trusted Locations и Trusted Domain Locations.
Новые функции LISP
В AutoLISP/VisualLISP добавлена новая функция (findtrustedfile). Она полностью аналогична старой (findfile), но выполняет поиск только по «доверенным» каталогам (TRUSTEDPATHS).
Вертикальные решения на основе AutoCAD
Все, описанное в статье, работает и в вертикальных решениях.
AutoCAD OEM 2014
- существующее значение ACADLSPASDOC и соответствующие настройки в диалоге Параметры недоступны
- мастер развертываний не менялся
AutoCAD для Mac
AutoCAD для Mac поддерживает описанные возможности практически целиком. Единственное «но»: не был изменен графический интерфейс.
Новые системные переменные SECURELOAD, TRUSTEDPATHS, TRUSTEDDOMAINS и ключ «/safemode» — это единственный способ контролировать настройки безопасности в AutoCAD для Mac.
В AutoCAD для Mac не вносились изменения в диалог параметров, поэтому значения системным переменным придется задавать вручную.
AutoCAD LT 2014
Описанные возможности недоступны в AutoCAD LT. В AutoCAD LT нет подобных трудностей, связанных с безопасностью, т.к. AutoCAD LT не поддерживает пользовательское программирование.
В AutoCAD LT 2014 системная переменная SECURELOAD имеет жестко прошитое значение 1, и нет никаких настроек, могущих изменить значение этой системной переменной.
AutoCAD 2014 JavaScript API
Если пользователь пытается загрузить JavaScript, располагающийся не в доверенном домене, AutoCAD выдаст предупреждение и потребует подтверждения загрузки кода (см. выше, «Диалог о загрузке недоверенного приложения).
Опубликовано 03.09.2013
Отредактировано 26.08.2015 в 21:24:57