|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
16.01.2008, 14:05 | #1 | |
Объекты СОМ в AutoCAD
Руководитель фирмы
Москва
Регистрация: 28.03.2007
Сообщений: 1,831
|
||
Просмотров: 39463
|
|
||||
От блин! Спасибо Profan!
Должно быть: ; IWshShell3: Shell Object Interface (тут я не уверен) ; Значения свойств: ; CurrentDirectory = ...Индексированное содержимое не выводится... ; Environment = "System" ; SpecialFolders = Путь к папке ; Поддерживаемые методы: ; ExpandEnvironmentStrings (1) ; Popup (4) ; SendKeys (1) ; Run (3) ; Exec (1) ; AppActivate (1) ; RegDelete (1) ; RegRead (1) ; RegWrite (3) ; LogEvent (3) ; CreateShortcut (1) T Чувствуете разницу? Меня смущает IWshShell3 Боюсь, что объект перехватывается не той dll-кой. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
http://msdn2.microsoft.com/en-us/lib...3k(VS.85).aspx
http://msdn2.microsoft.com/en-us/lib...h7(VS.85).aspx http://msdn2.microsoft.com/en-us/lib...xf(VS.85).aspx Хотя и под VS 2005, но объект WScript не менялся, насколько я понял.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
А по человечески сказать что сделать нельзя?
Такое ощущение, что WScript.Shell несколько в разных dll-ках и происходит тот кошмар, о котором гудят на форумах по скриптам. Где этот гад IWshShell3 лежит? И как его временно заткнуть? Последний раз редактировалось Supermax, 16.01.2008 в 15:07. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
AutoCAD 2005:
Код:
Код:
Код:
А по ссылкам (особенно последней) можно посмотреть вообще все методы, которые существуют в WScript.Shell. Там и Run упоминается, в частности.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Если на VBA написать:
Код:
Хотя свойства показывает, что одно и методов не наблюдает. В реале свойств 3 см. выше. VBA лезет не в system32, а в свою директорию а в system 32 лежит тоже wshom.ocx если его переименовать, то создается вновь. Слегка ошибся в названии wshom.ocx Последний раз редактировалось Supermax, 16.01.2008 в 16:14. |
||||
|
||||
Все! И в лиспе заработало.
(setq oWsh (vlax-create-object "WScript.Shell")) (vlax-invoke-method oWsh "Popup" "Вы точно хотите грохнуть винчестер?" "3" "Убийца винчестеров" "0") ;(шутка) Оказывается описанное здесь: http://www.script-coding.info/WSH/WshShell.html#3.11. В описании метода Popup не годится для использования из под AutoLISP-а. Исправления для этого случая выделены красным. Синтаксис: Popup(<Text>,<SecondsToWait>,<Title>,<Type>) Назначение: выводит на экран модальное окно сообщения. Параметры: <Text> - необязательный строка, текст сообщения. <SecondsToWait> - обязательный, (а там необязательный)число. Количество секунд, по истечении которого окно будет автоматически закрыто. <Title> - необязательный, строка. Текст заголовка окна сообщения. <Type> - обязательный (там тоже необязательный), число. Комбинация флагов, определяет тип кнопок и значка. Возможные значения флагов: 0 - кнопка ОК. 1 - кнопки ОК и Отмена. 2 - кнопки Стоп, Повтор, Пропустить. 3 - кнопки Да, Нет, Отмена. 4 - кнопки Да и Нет. 5 - кнопки Повтор и Отмена. 16 - значок Stop. 32 - значок Question. 48 - значок Exclamation. 64 - значок Information. Описание: возвращает целое значение, с помощью которого можно узнать, какая кнопка быля нажата пользователем. Возможные значения: -1 - таймаут. 1 - кнопка ОК. 2 - кнопка Отмена. 3 - кнопка Стоп. 4 - кнопка Повтор. 5 - кнопка Пропустить. 6 - кнопка Да. 7 - кнопка Нет. Если вы хотите увидеть рядом с сообщением значек Information и при этом чтобы было Стоп, Повтор, Пропустить, то есть 2, то надо сложить 64+2 и там написать 66. Пример: (vlax-invoke-method oWsh "Popup" "Цена проги 100$" "3" "Прайс-лист" "66") Последний раз редактировалось Supermax, 16.01.2008 в 19:29. |
||||
|
||||
Увы, в думпе видим фигу, а на деле и свойства все читаются (проверил) и методы работают. Более того, метод Exec имеет только один аргумент, а в думпе написано 2. Вот, какие пироги.
О последней ссылки Kpblc-a: Это для английской версии Windows и во многом применимо только для VBA. Для лиспа, как видим из вышеописанного надо проверять всех атрибуты на обязательность и не обязательность. По другим объектам скорее всего тоже. Последний раз редактировалось Supermax, 16.01.2008 в 19:33. |
||||
|
||||
Следующая заковыка.
ADODB.dll ---------------------------------------------------- ADODB.Connection создается ADODB.Stream создается ADODB.Recordset создается ADODB.Command создается ADODB.Field создается только после использования метода Open объекта ADODB.Recordset ADODB.Fields создается только после использования метода Open объекта ADODB.Recordset Последний раз редактировалось Supermax, 19.01.2008 в 16:28. |
||||
|
||||
Цитата:
Если открывал, то код в студию... |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Для работы с ADO достаточно использовать библиотеку ADOLisp (http://fleming-group.com/, да и здесь на форуме уже несколько раз мелькала). В документации по ней описывается все что только можно
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Елпанов Евгений
(vl-load-com) (setq svr (vlax-get-or-create-object "ADODB.Recordset")) ; сздаем объект (vlax-dump-object svr T); распечатываем Dump (vl-catch-all-apply '(lambda () (vlax-release-object svr))); освобождаем объект. Во его свойства и методы: Код:
http://www.w3schools.com/ado/met_rs_open.asp http://translate.google.com/translat...006-40,GGLR:en Я хотел что-нибудь открыть, да так и не решил что. Последний раз редактировалось Supermax, 17.01.2008 в 12:58. |
||||
|
||||
Цитата:
потом его необходимо открыть, передав ему все 5 аргументов... Пока ты его не откроешь, у тебя нет выбранных данных! Сам посуди, если ты создал объект Recordset , он же даже не знает, из какого файла тебе нужны данные. А поле Fields - это и есть выбранные sql запросом данные из конкретной базы данных, из конкретной таблицы и отобранные конкретным фильтром... Вот мой самый старый вариант программы, чтения базы данных. Даю именно этот вариант - в нем очень подробные коментарии по аргументам... Код:
Последний раз редактировалось Елпанов Евгений, 30.08.2011 в 00:55. |
||||
|
||||
Цитата:
Все остальные варианты еще более специализированы, к тому же, почти без комментариев.. |
||||
|
||||
Наш человек! Я тоже не любитель библиотек. Правда DLL это как бы спуск на ярус ниже. Ближе к ассемблеру. Их функции на ОС заточены и без них много не напишешь. Вон в 9-ом посте какие крутые окошки можно вызывать, а на лиспе я только одну функцию знаю - alert, которая примитив-примитивом
Пошли дальше: CDOEX.DLL ----------------------------------------- CDO.Addressee CDO.Appointment CDO.Attendee CDO.CalendarMessage CDO.Configuration CDO.DropDirectory CDO.Folder CDO.Item CDO.Message CDO.NNTPEarlyConnector CDO.NNTPFinalConnector CDO.NNTPPostConnector CDO.Person CDO.SMTPConnector Описание тут: Collaboration Data Object http://pda.computerra.ru/index.php?a...=26296&id=7627 только для Windows 2000. Во всяком случае, у меня нет программы, работающей с этой dll-кой и устанавливаться под XP она не желает. Вот ее описание: |
||||
|
||||
cdosys.dll
----------------------------------------------- CDO.Message CDO.DropDirectory CDO.Configuration CDO.DLL ------------------------------------------------- MAPI.Session Не рекомендую проводить эксперементы с MAPI.Session и CDO.Message с включенны интернетом и на работе с сетью. Я лчно сервак фирмы на пол часа подвесил. Тоже работают под XP и вот их описания: |
||||
|
||||
Страшная штука!
ADROT.dll ------------------------------------------------- AdRotator.AdRotator Тут про борьбу со злом: http://translate.google.com/translat...006-40,GGLR:en Только почему-то там говорится про brrotate.dll и adrotate.dll на три буковки слово длиннее. Разбираться надо, однако. Можно использовать для вывода на экран разного рода информации, если за этой dll-кой не будут охотиться сисадмины. Описание: Последний раз редактировалось Supermax, 17.01.2008 в 14:33. |
||||
|
||||
asptxn.dll
------------------------------------------------- ASPTxnTypeLibrary.ASPObjectContextTxNotSupported ASPTxnTypeLibrary.ASPObjectContextTxRequired ASPTxnTypeLibrary.ASPObjectContextTxRequiresNew ASPTxnTypeLibrary.ASPObjectContextTxSupported Более подробно: http://www.webtropy.com/articles/art...TxnTypeLibrary Описание: |
||||
|
||||
ASP.dll
------------------------------------------------- ASPTypeLibrary.Application ASPTypeLibrary.Request ASPTypeLibrary.Response ASPTypeLibrary.ScriptingContext ASPTypeLibrary.Server ASPTypeLibrary.Session За информацией сюда: http://www.asp.net/ и сюда: http://www.aspnetmania.com/ Описание: Последний раз редактировалось Supermax, 17.01.2008 в 14:49. |
||||
|
||||
browscap.dll
--------------------------------------------------- BrowserType.BrowserCap http://www.dll-files.ru/dll/b/browscap.dll.html Описание: Последний раз редактировалось Supermax, 28.02.2008 в 13:25. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Справка разработчика (ADT 2006) говорит следующее:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Sheet Set Manager - это сервис автокада, а не объект.
Вызывается через File\New Sheet Set... После того, как ты создал подшивку листов, в автокаде создаются следующие объекты: AcSmAcDbBlockRecordReference AcSmAcDbDatabase AcSmAcDbLayoutReference AcSmAcDbObjectReference AcSmAcDbViewReference AcSmCalloutBlockReferences AcSmCalloutBlocks AcSmCustomPropertyBag AcSmCustomPropertyValue AcSmDatabase AcSmDSTFiler AcSmEvent AcSmFileReference AcSmNamedAcDbObjectReference AcSmObjectReference AcSmPersistProxy AcSmPublishOptions AcSmResources AcSmSheet AcSmSheetSelSet AcSmSheetSelSets AcSmSheetSet AcSmSheetSetMgr AcSmSheetView AcSmSheetViews AcSmSubset AcSmViewCategories AcSmViewCategory IAcSmComponent IAcSmEnumAcDbBlockRecordReference IAcSmEnumComponent IAcSmEnumDatabase IAcSmEnumFileReference IAcSmEnumPersist IAcSmEnumProperty IAcSmEnumSheetSelSet IAcSmEnumSheetView IAcSmEnumViewCategory IAcSmEvents IAcSmObjectId IAcSmPersist PropertyFlags Более подробно о них, их свойствах и прочими аксессуарами сюда: http://www.kxcad.net/autodesk/autoca...Help/1sso.html Пример работы на VBA - сюда: http://www.augi.com/education/auhand...005/CP15-1.pdf Чтобы создать такие объекты надо делать так: (setq asadbrr (entmakex '((0 . "AcSmAcDbBlockRecordReference") и тут другие пары для этого объекта))) Какие пары нужны для создания я не знаю, и последовательность создания тоже. Не было нужды. Последний раз редактировалось Supermax, 19.01.2008 в 13:50. |
||||
|
||||
СОМ объект, это массив данных в оперативной памяти машины (включая в понятие "оперативная память" и временные файлы), которые понимается как объект, то есть имеет свойства, допускает или не допускает применение к себе различных методов и после этого реагирует определенным образом на эти действия.
Чтобы его создать нужна программа с расширением *.exe Которая пользуясь алгоритмом создания, написанного либо прямо в ней, либо в библиотеке *.dll создает такой объект. От того, что вы положили себе в машину dll-ку - никаких объектов не появится. И даже если вы положили программу, работающую с ними, но не запустили ее - тоже, объектов не найдете. Зарегистрировать эту dll-ку вы сможете, только если в реестре есть указание на программу, которая с ней работает. AutoCAD тоже является такой программой и некоторые объекты он создает, только если его заставить это сделать. Все вышеперечисленные объекты таковыми и являются. Функция vlax-get-or-create-object не создает объект!!! Она вычисляет указатель (VLA-объект), или создает указатель, да и то, только для внешнего приложения! Цитирую Полещука: Цитата:
Аминь. Последний раз редактировалось Supermax, 19.01.2008 в 13:40. |
||||
|
||||
seo.dll
------------------------------------------------- SEOLib.CEventBindingManager SEOLib.CEventComCat SEOLib.CEventLock SEOLib.CEventManager SEOLib.CEventMetabaseDatabaseManager SEOLib.CEventRouter SEOLib.CEventUtil SEOLib.CSEODictionaryItem SEOLib.CSEOGenericMoniker SEOLib.CSEOMemDictionary SEOLib.CSEOMetaDictionary SEOLib.CSEOMimeDictionary SEOLib.CSEORegDictionary SEOLib.CSEORouter SEOLib.CSEOStream Описание: |
||||
|
||||
smtpadm.dll
-------------------------------------------------- SMTPADMLib.CSmtpAdmin SMTPADMLib.CSmtpAdminAlias SMTPADMLib.CSmtpAdminDL SMTPADMLib.CSmtpAdminDomain SMTPADMLib.CSmtpAdminService SMTPADMLib.CSmtpAdminSessions SMTPADMLib.CSmtpAdminUser SMTPADMLib.CSmtpAdminVirtualDirectory SMTPADMLib.CSmtpAdminVirtualServer SMTPADMLib.CWebAdminHelper Описание: |
||||
|
||||
mshtml.tlb
-------------------------------------------------- MSHTML.BlockFormats MSHTML.CEventObj MSHTML.CMimeTypes MSHTML.COpsProfile MSHTML.CPlugins MSHTML.DOMChildrenCollection MSHTML.FontNames MSHTML.FramesCollection MSHTML.HTCAttachBehavior дописать Описание: |
||||
|
||||
Msxml2.dll
---------------------------------------------------------------- MSXML2.freethreadeddomdocument MSXML2.freethreadeddomdocument.3.0 MSXML2.freethreadeddomdocument.4.0 MSXML2.freethreadeddomdocument.5.0 MSXML2.freethreadeddomdocument.6.0 MSXML2.domdocument MSXML2.domdocument.3.0 MSXML2.domdocument.4.0 MSXML2.domdocument.5.0 MSXML2.domdocument.6.0 MSXML2.serverxmlhttp MSXML2.serverxmlhttp.3.0 MSXML2.serverxmlhttp.4.0 MSXML2.serverxmlhttp.5.0 MSXML2.serverxmlhttp.6.0 MSXML2.xmlhttp MSXML2.xmlhttp.3.0 MSXML2.xmlhttp.4.0 MSXML2.xmlhttp.5.0 MSXML2.xmlhttp.6.0 Описания у меня пока нет, но указатели на эти все объекты создаются. Последний раз редактировалось Supermax, 19.01.2008 в 14:13. |
||||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
[q]Пример работы на VBA - сюда:
http://www.augi.com/education/auhand...005/CP15-1.pdf[/q] Архиполезная ссылка! Спасибо!!! Жаль, что с подшивками вообще нельзя работать через ЛИСП. Придется всерьез учить VBA |
|||
|
||||
Ты че? Нельзя в субботу работать!
Русским языком написано: Цитата:
У меня - пустая папка AutoCAD Sheet Sets. Вот ты файлец CP15-1 AU2005.dst сначала создай, а потом к нему и подбирайся. |
||||
|
||||
Там рядышком еще три вещицы есть:
http://www.augi.com/education/auhand...005/CP15-2.pdf http://www.augi.com/education/auhand...005/CP11-1.pdf http://www.augi.com/education/auhand...005/CP11-2.pdf Последний раз редактировалось Supermax, 19.01.2008 в 19:38. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
> Supermax, ты меня, конечно, извини, но, может, тебе будет проще найти MDSN для 6-й студии (по-моему, 3 CD или что-то около того)? Там полно вещей расписано. Например, 48-й пост, судя по всему, описание одной из версий Microsoft Common Dialog (а их может быть зарегистрировано до 6 штук, и в каждой свои примочки).
#47: Похоже на Microsoft XML Parser, ставится вместе с .NET 1.0 (т.е. начиная с AutoCAD 2005). Для .NET 2.0 используется немного другая версия парсера, по-моему. Ну и так далее. Часть из вещей общие для 32-разрядных систем Microsoft, часть меняется в зависимости от полусистемных (типа MS .NET x.x) вещей, некоторые могут зависеть от версии AutoCAD... Подчеркиваю - сугубо ИМХО!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Kpblc, если у тебя лично есть какие-нибудь описания COM объектов, хоть свои, хоть чьи-то, то клади сюда.
Вот списал с реестра список доступных СОМ объектов самого AutoCAD-a: Для 207 и 2008-го Код:
Код:
Код:
Где бы почитать про них? |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Цитата:
В справке разработчика AutoCAD'a описано все это. А что не описано - есть в ObjectARX SDK. Смысла в обращении к AutoCAD через СОМ из-под самого AutoCAD лично я не вижу. Это может требоваться при работе из-под Excel'a, к примеру. Но и тут тоже не все гладко (связано с методом связывания - ранним или поздним). Если интересно мое видение этого кусочка, могу рассказать (возможно, я ошибаюсь, но пока моя точка зрения капитальных промахов не давала).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
На русском языке и под рукой никаких описаний нет,
Вот Думп всех СОМ самого Автокада: (может пригодится тем, кто пишет на VBA) Код:
Что надо, чтобы он заработал? |
||||
|
||||
AdCommon.dll
-------------------------------------------------------- AdCommon.AdFileOpenDialog AdCommon.AdHistoryManager AdCommon.AdOptionsDialog AdCommon.AdParam AdCommon.AdPoint AdCommon.AdPoint AdCommon.AdPoint3D AdCommon.AdProperty AdCommon.AdServiceHandlerFinder AdCommon.AdStringPair AdCommon.AdTempFileMgr AdCommon.AdToggle AdCommon.AdTransform AdCommon.AdUrlUtility AdCommon.AdViewerUtility AdCommon.Collection AdCommon.Collection2 AdCommon.Rect Очень интересует объект "AdCommon.AdFileOpenDialog" и его метод "ShowFileOpenDialog" с четырьмя параметрами. А если точнее, то четвертый - обязательный. Никак не подберу. Первые три вообще пустую строку пропукают, а четвертый чего-то хочет, но чего - не врублюсь. Может кто по аналогии может угадать? Ну что нужно, чтобы вызвать окно выбора файла? И где взять описание этих объектов? Сразу даю лисп для ускорения поиска четвертого аргумента. Код:
Последний раз редактировалось Supermax, 25.01.2008 в 17:39. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Во, спасибо LeonidSN, на caduser.ru указал на ссылку http://www.visual.2000.ru/develop/ms...-1/binding.htm - немного по вопросу связывания.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Мне интересно, где ты нашел эту dll и каково ее полное имя? Посмотри на аттачи (сделано в VB6.0)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Стал изучать jбъекты:
Microsoft Scripting Runtime C:\WINDOWS\system32\scrrun.dll Scripting.FileSystemObject Scripting.Dictionary Scripting.Encoder Shell Extension For Windows Script Host C:\WINDOWS\system32\wshext.dll Scripting.Signer И решил прояснить, для себя, в первую очередь, картину с наличием или отсутствием возможности обращения к COM объекту из AutoCAD-а. Я напишу свое видение вопроса, а если в чем и заблуждаюсь, так очень буду благодарен за поправку. И так: СОМ объекты создаются в памяти машины только исполняемыми модулями *.exe или *.com. Некоторые *.exe являются постоянно действующими приложениями, их хорошо видно в диспетчере задач в закладке "Процессы". Некоторые являются только временными программами и они видны и в "Процессы" и в "Приложения". Собственно все *.exe это приложения к основной программе "Операционная система", только некоторые запускает сама ОС при начале работы и выключить их можно только вручную или при сбое, а некоторые запускает сам пользователь, например AutoCAD. Чтобы в памяти создался COM объект программа должна иметь данные о нем. Некоторые программы содержат такие данные у себя в теле программы, а некоторые содержат их в специальных файлах-библиотках типа *.dll. Некоторые программы сами знают где должен лежать файл с их библиотекой, а некоторым надо прописать путь в реестре к этой библиотеке. Более того, чтобы создать некоторые объекты не достаточно просто прописать путь в реестре, надо еще туда поместить описание самого СОМ объекта. Если мы хотим чтобы при запуске машины сразу создавались нужные СОМ объекты, надо чтобы в реестре они были описаны должным образом. В библиотеке может содержаться описание десятков объектов, но если в памяти создать все описанные в библиотеках объекты, то никакой памяти не хватит. Поэтому и получается, что из AutoCAD-a мы можем "дотянуться" до объектов Scripting.FileSystemObject Scripting.Dictionary Scripting.Encoder а до других объектов библиотеки scrrun.dll - нет, поскольку они не описаны в реестре. Чтобы их описать нужен файл *.reg который собственно и предназначен для добавления в реестр нужных описаний. При установке некоторых программ типа Visual Studio эти описания в реестр прописываются автоматом, а некоторые объекты создаются прямо при прямом взаимодействии этой программы с dll-файлом. Объектов очень много - море. Здесь и красивые меню, форматки сообщений, обработчики событий и много другое, что может пригодится для работы в AutoCAD-e. Но как быть, если dll-ок тысячи и в каждой десятки объектов? Не всякую dll-ку можно загрузить из под regsvr32.exe и не всякая заработает без *.reg с описанием нужных объектов. Если для создания объекта нужна прога - то надо ее иметь. Многие dll-ки такими exe-шниками укомплектованы. Word, Exel и прочие тоже создают СОМ объеты пока сами работают. При выключении такие объекты удаляются из памяти. Есть программы, которые удаляют из памяти не нужные СОМ объекты. Буквально вчера видел, но сюда ссылку дать забыл, а теперь надо по новой искать. С выбором файла (ов) так, как это мы привыкли делать, с кнопками ОК и Саncel и возвратом значения выбранного, да чтобы еще и окно можно было растягивать - глухо как в танке. Ищу, блин, короче. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Цитата:
Цитата:
Значит так. Насчет Scripting Object и ему подобных - см. ПМ. На предмет окна открытия файла - я говорил, что тут надо или писать собственный СОМ, или на .NET / arx делать подгружаемое приложение, или рисовать стороннее ехе-приложение.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
С другой стороны, без них она и сама не загрузится. Естественно, если в программе нет собственного модуля создания СОМ, а используется дополнительный ехе-шник, то программа не содержит не только сведений о структуре СОМ (в dll-ке лежит), но и сама его не создает. Опять же считать прилагаемые ехе-шники неотъемлемой частью программы или нет? Короче пошла философия. |
||||
|
||||
Пытаюсь создать прогу на лиспе, в которой в качестве подпрограммы была бы выполнена программа на WBScript. Алгоритм следующий:
Создаем временный объект Техт, и создаем реактор на его изменение. Запускаем через DwgRu-WScript-Exec или DwgRu-WScript-Run скрипт-файл, который заканчивается обращением к AutoCAD.Application.17 или 16, а то и просто без цифр (пока не решил, скорее всего будет автоматическая настройка по результатам опроса версии када), находим там нужный объект типа техт и записываем в него значения переменной из скрипта. По идее, если мы это сделаем, то должен сработать реактор и далее идет считывание из этого техт-а вернувшегося значения из скрипта, и продолжение програмы на лиспе. Так вот, кто-нибудь, когда-нибудь такое делал? Может я зря порю горячку и есть другой способ получения результатов работы сторонних программ? Может есть другой способ приостановить работу лиспа до тех пор, пока не будет выполнена программа на стороне? |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Зачем??? Извини, но у тебя абсолютно неправильный метод работы (практически ИМХО). Технология такова (по крайней мере я применяю):
1. Создается через (vlax-get-or-create-object) СОМ-объект 2. Через vlax-put-property задаются начальные значения свойств. 3. Через vlax-invoke-method или vlax-invoke запускатся нужный метод (который чего-то-там делает), возвращающий какое-то значение (к примеру). На время выполнения метода лисп останавливается. 4. Анализируется полученное значение и продолжается выполнение лиспа.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Вчера прочел замечательную статью
http://www.nowa.cc/showthread.php?t=65684 Вспомнил молодось, когда прошивал ПЗУ и возился с Ассемблером, правда с тех пор забыл все напрочь. Очень внимательно прочел и понял, что докопаться до функций из DLL можно и без ее регистрации, наличия программ для работы с ней и прочего. И прямо из под лиспа через запуск все того же debug.ехе Да и по памяти шариться и в регистры устройств заглядывать тоже. Если не сойду с ума, обязательно попробую. |
||||
|
||||
#65
Все это мы проходили и обгрызли как яблоко до голого качана (или кочана?). НО! AutoLISP работает только в AutoCAD-e это раз. Те свойства и методы, которые мы получаем при запуске внешнего приложения из под лиспа не дают полного доступа к работе самой программы и как сделать реактор на события в ней, я лично даже не представляю. Очень многие проги имеют свои собственные языки или слегка, но весьма существенно отличающиеся варианты существующих как например сам автокад. Далеко не все программы создают СОМ объекты для работы с ними из других программ. Как организовать последовательный диалог двух программ? С передачей интерфейса управления пользователю. К примеру: Рисуем теплотрассу и одновременно отчерчиваем ее в Старте. Тут нарисовал - туда першло все само и там тебя о чем-то спросило. Ты ответил - опять в кад вывалился и тут продолжил работу. Это конечно так, фантазии. Меня сейчас сам принцип интересует. Туда-сюда. Хочу написать программу сразу для двух приложений. |
||||
|
||||
Поскольку тут тема про СОМ, то будет полезно дать пару ссылок на статьи про это:
http://www.wasm.ru/publist.php?list=15 Почти все на русском. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
> #67 : Тогда рисуй реактор на добавление объекта в файл AutoCAD'a, и обрабатывай эти события. Только СОМ-объект создавай не внутри реактора, а вне - иначе система гавкнется.
> #68 : дополнительно http://firststeps.ru/ и там, например, в Visual Basic - как раз все рассмотрено про COM на VB
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Само добавление объекта ничего не даст, хотя конечно, смотря какого. Мне надо вернуть из сторонней проги результат ее пыхтения в лисп, из которого она запущена. Значит надо создавать объект техт с содержимым в виде значения "пыхтения" той проги. Убиваем двух зайцев одним махом. Вопервых - получаем сигнал, что там все сделано, во вторых получаем данные от туда. Мы от туда можем много раз получать "посылочки" и их обрабатывать вплоть до посылочки с сигналом, что там все закончено. Сейчас спешу, но чуть позже обязательно займусь.
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Если бы я знал, что такое Старт и его объектную модель, можно было бы поковыряться. Но! Я искренне убежден, что "если данные можно передать/обработать/получить в/из памяти, то там это и надо делать". Вот скажи, какая разница (теоретически) - создавать объект текста или возвращать результат выполнения метода СОМ-объекта в памяти? Все равно пока метод не завершит свою работу, у тебя AutoCAD afaik будет блокирован (я не рассматриваю .NET-dll, создающие немодальные окна; а также arx-приложения, рассчитанные на те же немодальные штучки).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Вот тут ты батенька даже задержал меня на пути к кулеру за кипяточком.
Я был бы бы не против, если бы прога "со стороны" записывала данные в область памяти мне известную и доступную, но акромя реестра, я таковой не знаю. Метод не всегда дожидается, пока я что-то там сделаю например с окном ввода текста. Он мне немедленно возвращает вла-объект этого окна, а как от туда выковырять текст, что я ввел - не знаю. Объект WScript вообще можно использовать только из скрипт-файла, http://www.script-coding.info/WSH/WScript.html а там есть такие замечательные методы как ConnectObject который устанавливает соединение с объектом автоматизации для обработки его событий. Вот это реакторы, так реакторы. Соединяя несколько языков в одну кучу, мы получаем очень не слабый инструмент для создания программ для автокада. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
А вот сейчас я огребу по полной программе. Во вложении - СОМ-dll, исходники для нее на VB6 и лисп для тестирования под AutoCAD. Перед запуском лиспа dll надо зарегистрировать через regsvr32 (примерно так, как это написано здесь).
Нарисовал второпях, так что за красивость кода не ручаюсь
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Ну "торопяхи" у тебя тоже ничего. Добавить свойства на заголовок и другие надписи и будет круто.
И от кого ты "отгребешь"? За что грести? Как я понял, публику ничему не научишь. Один на миллион если найдется, так и то в антарктиде. |
||||
|
||||
Цитата:
http://www.suncloud.ru/workshop/wdhp...js/vbsvsjs.htm |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Проанализируй мой код лисповой - я же там как раз передаю variant, сделанный из safearray'a
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Цитата:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Ну вот, я уже здоров.
Хочу высказать пару своих мыслей по поводу применения «внешних» по отношению к Автокаду языков. Под понятием «внешние» я подразумеваю те языки, которых Автокад не понимает. Например языки Jscript, WBScript и прочие радости. Я попытался объединить усилия двух «разношерстных» языков над одной задачей. В частности AutoLISP и WBScript. Зачем? А я тогда и сам не знал. Так, для приколу. И вот что из этого получилось: Когда нужно скакать с одного сценария в другой Фигаро тут – Фигаро там, то все равно надо принять решение с чего начинать? Начать с запуска Лиспа не получилось (пока) слабоват я пока в этих информационных потоках. Что там течет?, от куда?, куда?, для чего?, как на это повлиять? и чем? понятия не имею, а прочесть негде (пока). Так что, кроме запуска из под Автокада скрипт-файла – ничего совершить не удалось. Ну, запустил, ну, отработал скрипт и выдал через MsgBox какую-то билибердень, ну и что? Установить контакт из-под этого скрипта с текущим окном Автокада не удалось. Указатель упорно не хочет указывать на уже открытый документ и это понятно почему. Если вы запустите второй Автокад и попытаетесь открыть второй раз этот же файл – получите фигу. Разве что только для чтения. Вмешательство со стороны в работу приложения над файлом и «помощь» в этом процессе расценивается аналогично. Но я все-таки это сделал. Но об этом позже. Установить связь из Лиспа с запушенным сценарием скрипта, или хотя бы с СОМ объектами сгенерированными им – тоже не получилось по причине слабого владения СОМ технологией и высокой температуры головы. Бился я бился, устал, плюнул и зашел с тыла. Стал пытаться пробиться к открытому документу Автокада со стороны скрипта. Как я уже говорил, установить контакт с уже открытым документом не получается, НО! После запуска скрипта, при попытке применить метод SendCommand из ActiveDocument я наконец-то прозрел в понимании последствий обращения к объектам Автокада из под скрипта. Во первых, Автокад может быть и выключен вообще. Во вторых, при обращении с неправильными аргументами разных методов (я их тьму перепробовал) открывается в уже включенном Автокаде новый файл или появляется меню выбора «Select template». При правильном наборе аргументов идет запуск нового Автокада и в нем, в Drawing1.dwg происходит осуществление задуманного. Я так понял, что пробраться в работающий кад все же можно, но вот, в текущее окно с документом – вряд ли. Запустить Автокад из под скрипта и открыть нужный файл – запросто. И вот тут создается та самая искомая ситуация, когда есть запущенный скрипт, из него установлена связь с Автокадом и открытым в нем документом. Из скрипта можно рисовать в этом документе что хочешь и с клавиатуры и мышью тоже, а также запускать из под Автокада любые макросы на Лиспе вплоть до таких, которые обращаются к тем же СОМ объектам что и скрипт. Из под скрипта можно через ком. строку запускать лисп-выражения, которые создают переменные, тем самым передавать строковые и цифровые данные в макросы работающие на Лиспе. В скрипте есть возможность наблюдать за процессами в запущенном приложении. Я еще не разобрался с ними, но скоро разберусь. А пока вот, побалуйтесь: Перед вами два скрипт-файла. Один – та самая программа, которая запускает Автокад и далее в нем может «наводить шорох». Другой – скрипт с простеньким MsgBox-ом, для теста. Скачайте все в директорию С:\WSH создайте такую на диске С. Зайдите в библиотеку DWGRU и скачайте лисп с функцией «DwgRu-WScript-Exec». Все свои кады повыключайте и дважды щелкните по файлу fst.vbs. Выскочит сообщение о начале представления. Нажмите ОК. Запустится Автокад и в Drawing1 будет нарисована косая линия, после чего опять выскочит панель с надписью «далее». Но вы на ОК не нажимайте! А клацните по модели (панель с «далее» свалится в строку «пуск», красненький значок) Нажмите Ctrl+9, появится командная строка. Загрузите через Tools файл DwgRu-WScript-Exec.lsp с одноименной функцией и в командную строку от сюда скопируйте это выражение: (DwgRu-WScript-Exec "С:\\WSH\\ проба.vbs " "") После запуска скрипта «проба» появится окно с сообщением и после нажатия на него ОК можно достать из ком. строки наше окно с «далее» и нажать там ОК. А можете перед этим еще и порисовать в модели. Только линию не трогайте. Это часть выноски. Нажатие на ОК дорисует выноску с текстом «привет!» Причем линию будет рисовать передачей команды, а текст передачей лисп-выражения. Следуещее «далее» создаст переменную www и запишет в нее строку и сразу в командной строке пропишет !www. Все это будет видно. Код:
Что это дает? Ну возьмем длительный и сложный процесс обработки чертежа, когда этот процесс то и дело прерывается найденными ошибками. Их надо править. Зачастую с применением макросов. Что, каждый раз процесс обработки запускать заново? А если он попутно на каждом этапе документы варганит? Их что, стирать каждый раз? Кто-нибудь может в одном и том же документе запустить два Лиспа одновременно? То-то. А тут лепота. Основной сценарий, даже просто директивы запуска лисп блоков пишется на скрипте, а уж в Автокаде происходит само представление. Никто никому не мешает. Через скрипт можно организовать совместную работу над одним документом. Функция CreateObject WBScript имеет в аргументе дополнительное значение location - сетевое имя компьютера, на котором будет создан объект. Что дает возможность работать в сети в четыре руки, а то и в любом количестве. Видеть содержимое монитора в сети можно другими программами, а свои действия передавать через скрипт. Короче, для чего-нибудь такие заморочки пригодятся. В процессе изучения объектов AutoCAD.Application.16/17 и AutoCAD.Drawing.16/17 (дроби я сам написал, чтобы два раза не писать один и тот же объект) я понял, что AutoCAD.Application создавался для создания независимого процесса, а AutoCAD.Drawing – для процесса в уже открытом Автокаде. (это я так раньше думал, а теперь вот выяснил, что это для работы с объектами Автокада без его запуска в отдельном окне). По сути AutoCAD.Drawing – это "ActiveDocument". (setq svr (vlax-get-or-create-object "AutoCAD.Application.16")) (setq svr3 (vlax-get-property svr "ActiveDocument")) К сожалению AutoCAD.Drawing работать как надо не захотел из под WBScript. Создаваемые через него объекты лишь мельком появляются и пропадают. Почему? И сам пока не знаю. Забыл добавить. У кого только 2008 или 2007 кад поменяйте или сотрите в файле FST.vbs цифру 16 и точку перед ней, чтобы стало вот так "AutoCAD.Application" Последний раз редактировалось Supermax, 07.02.2008 в 16:47. |
||||
|
||||
Вот тут:
http://subscribe.ru/archive/comp.sof.../18004013.html Я нашел про AutoCAD.Drawing.16 Цитата:
Я не знаю, от куда взяли эту информацию они, но похоже, очень похоже на правду. Больше поисковик ничего не нашел, увы. |
||||
|
|||||||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Ну ни себе фига ты отдохнул :) Я только с пятого или шестого раза смог все осилить. Ща я тут тоже развернусь в отместку ;) Чур, стоптанными тапками не кидаться! ;)
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Код:
Цитата:
> #82: Что "не инициализируя сам AutoCAD" - так это наглая ложь. AutoCAD все равно вызывается (можно посмотреть через список процессов). Вдобавок неизвестно, какой профиль и какая версия будет вызвана. А это чревато: в автозагрузке профиля может сидеть неизвестно что, загрузка AutoCAD'a может занимать немеряно времени. Выполнение метода .Save для текущего документа тоже не будет давать 100% гарантированного результата - формат файла заранее неизвестен, неизвестно, сколько там мусора будет ну и тому подобное. Если честно, я сам иногда грешу подобным подходом (то есть из-под AutoCAD'a вызвать exe, внутри ехе обратиться через СОМ к активному AutoCAD'у и его документу, чего-то сделать и закрыть ехе), но таких ситуаций у меня раз-два и обчелся.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
||||||||
|
||||
Цитата:
Запуск скрипта -> скрипт и работа в нем без AutoCAD'a ->запуск AutoCAD'a скриптом -> открытие документа AutoCAD'a -> работа в документе -> работа в скрипте -> работа в документе ... -> работа в скрипте - сохранение и закрытие документа -> очистка мусора -> закрытие скрипта. Можно остановить работу скрипта без прекращения работы в AutoCAD-е. А вообще-то работы в скрипте как таковой и нет. Если скрипт запускает в каде какой-то лисп, то вот этот лисп и работает, а скрипт так, дирижер-сценарист. Не надо забывать, что скрипт может открыть кады на разных машинах и предоставлять сидящим за ними пользователям контроль за частью общего процесса. Очень интересно узнать, как ты обращаешся к активному каду и открытому в нем документу? |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Так я же код показал... Я не использую скрипты (в силу элементарного незнания), а для "нормальных" языков и такого подхода более чем достаточно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Супер! Если выкинуть твои попытки открыть новый сеанс через CreateObject и проверки с радостными сообщениями, то код доступа в уже открытый кад на скрипте выглядит так:
Код:
В итоге мы имеем скрипт, который вмешивается в работу AutoCAD-a и в открытом документе рисует что-то свое. Код:
Последний раз редактировалось Supermax, 08.02.2008 в 13:04. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Я-то пойму код. Я другого понять не могу - а на фига рисовать через SendCommand?
И вот еще - а если во время выполнения скрипта (до вызова GetObject) AutoCAD грохнулся? Сам или ему помогли - неважно. Что и в каком виде ты получишь - слабо предсказуемо...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Да я проверки выкинул не принципиально! Нужны они, нужны. Просто есть ключевые действия, а есть сопутствующие. Этих "сопутствующих" в десятки раз больше и основной код в них тонет просто. Ясен пень, что дав указание открыть надо проверить а открылся ли. У меня самого тысячу раз было что "проскальзывает" четкое и однозначное указание. Даешь указание "открыть", а открытия не происходит.
Я сначала расставляю основные действия и когда цепочка складывается в нужном мне русле, обвешиваю проверками (правда есть грешек, частенько эту процедуру опускаю). Да не обязательно через SendCommand. Кто сказал, что обязательно. Просто никак у меня пока не клеится с Add... методами да как в VBA можно, так и тут можно. WBScript, это такой VBA, который запускается простым двойным кликом по файлу с расширением *.vbs даже расширение одной только буквой отличается. Ну есть небольшая разница в синтаксисе, но это мелочи. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Ну уж не надо, что .Add так уж сложен... Вот, как пример, добавление точки в пространство модели активного документа:
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Некоторые выводы по случаю прозрения:
Запустить из под Автокада скрипт, в котором будет произведена связь с этим же самым открытым Автокадом можно. Получать данные от туда в текущий документ Автокада можно. Теперь надо передавать данные туда из Автокада. Какой бы СОМ объект выбрать для передачи данных? К сожалению я пока не знаю что возвращает SendCommand в ответ на запуск чтения данных из Автокада. Скорее всего nil. Прочесть я могу только свойства объекта а в Автокаде свободных свойств на сколько я знаю нет. Нужно такое, в которое я могу поместить и список и строку и просто числа. Kpblc, что подскажешь? |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Видишь ли, что ты, что товарищ вот здесь, как мне кажется, допускаете одну и ту же логическую ошибку. Вы к AutoCAD'у обращаетесь как к СОМ-серверу, когда требуется, чтобы он был клиентом.
Прошу - ну проанализируй посты с 65 по 79 (примерно). Мы пошли по второму (или какому там?) кругу... --- Добавлено: в скрипте сделай переменную для результата и аргумент заключи в скобки.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
В скрипте некоторые аргументы в скобки не ставятся, а некоторые ставятся. Я и так и так пробовал - не выходит.
http://www.script-coding.info/WSH/WshShell.html тут это видно. По методам полазь и сам увидишь. Вообще-то я из под скрипта рисовать ничего не намерен, это в моем случае совершенно не нужно. Копировать объекты из одного када в другой - да, обрабатывать на разных машинах содержащиеся в них файлы - да, а рисовать пусть сам кад и рисует. Лучше Автолиспа для этого просто не существует. НО! Что за фигня? Я нарисовать через командную строку могу, а специальные методы, предназначенные для рисования со стороны не получается запустить. Обидно, однако. Вот и мучаюсь. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Цитата:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Дело не в осуществлении какой-то конкретной задачи. Я VBScript пока только начал изучать и пробую всякие его правила и особенности. Наткнулся на передачу методам ADD... массива в виде варианта, да еще и saffearray. Вроде все правильно делаю, однако пишет, что аргумент не соответствует требуемому. Ну обойду я эти ADD... и что? Раз обойду, два обойду, так до старости их обходить? Это я свою озоновую дыру в мозге обхожу. Я чегото не так делаю или недопонимаю, а ты мне советуешь отступиться и не связываться.
|
||||
|
||||
Вернусь к данной теме про использование СОМ объектов в Автокаде (да простят меня гуру за русское название).
Не знаю почему, но потянуло меня разнообразить свои навыки в программировании и как задачу я поставил сделать меню к макросу Автокада, написанному на лиспе в виде HTML (не люблю рус\лат нажимать) файла. HTML файлы изобилуют крутой графикой и возможностью оперировать внешними приложениями. Загрузив такое меню, можно весьма сильно расширить свободу действий в самом Автокаде, ведь запуская лисп-макрос вы тем самым загружаете сам Автокад и во многих случаях не имеете возможность приостановиться и что-нибудь изменить в ходе работы самого Автокада. А в основном, если без напрягов по выдавливанию новых возможностей - графика. Какая графика! Первая мысль была такая: Запускаем из под Автокада обозреватель с отключенными органами управления и задаем ему наш файл HTM. В процессе нажатия кнопки, созданной на странице файла мы обращаемся к открытому Автокаду и там либо рисуем что-то, либо переменную определяем, прописывая в нее номер нажатой кнопки, либо что еще. НО! Попытки напрямую из HTM файла сделать getobject и влезть в открытый Автокад ничем не увенчались. Тогда я решил запускать из под Автокада скрипт-файл, а уже из него страницу HTM. Скрипт-файл *.vbs очень легко общается с открытым Автокадом (вот когда пригодились объекты СОМ самого Автокада). Рисует там все что хочешь, целые лисп выражения может запускать и прочее. Осталось из под скрипта запустить HTM файл. Если это делать тупо - через вызов эксплорера и загрузкой в него заранее сделанного файла - в эксплорере срабатывают чуть ли не все защитные мероприятия по работе с особоопасными объектами. А если открыть эксплорер с about:blank (это когда вместо адреса к страничке Интернета, хотят работать автономно) и создать страницу из под скрипта - все создается и "сигнализация не срабатывает". Хотя когда запускаешь копию страницы сайта - тоже не срабатывает. Разбираюсь вот. Надо из окна эксплорера, запущенного из под скрипта получить реакцию на нажатие кнопки или строки, короче событие происходящее в самом окне перенести в скрипт, который это окно вызвал. А уж потом, этот скрипт передаст данные в Автокад, Эксель, Ворд и прочие программы. |
||||
|
||||
На сером форуме нашел описание создания СОМ объекта прямо на VBScript или JScript.
http://forum.script-coding.info/viewtopic.php?id=1037 Сакажу честно, "все гениальное - просто!" не я придумал. Хороший сайт с тегами (это то, что пишется в <...>) http://www.htmlbook.ru/html/button.html |
||||
|
||||
Случилась беда. не хочет мой regsvr32 регистрировать test.wsc, а заодно и все остальные wsc, которые есть на компе. Пошарился по сети и что-то много случаев сбойной работы этой scrobj.dll
Может кто знает почему? Или попробуйте найти у себя любой файл с расширением wsc, типа того, что в предидущем сообщении и попробуйте его зарегистрировать. Может это что-то с моей машиной? |
||||
|
||||
Есть еще один очень любопытный вопрос. Вот есть СОМ объекты. Обращение к СОМ объекту через функцию (vlax-get-or-create-object ".....") возвращает vla-объект. Такой же как и у других объектов. Если сделать реактор на изменение свойства объекта, (а у многих СОМ объектов они есть) сработает ли этот реактор на изменение свойства у СОМ объекта?
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
К вопросу о СОМ-объектах из-под браузеров: http://inoe.name/novosti/20592-vojjny-brauzerov.html
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Да, е-мае! НЕ ЗАПУСКАЮ Я ПРИЛОЖЕНИЯ ИЗ ПОД БРАУЗЕРА! Я браузер запускаю из под Автокада. Да и то не сам браузер, а скрипт-сценарий. А скрипт ловит события на странице и только! Никаких активных элементов в странице нет. Запускается только она, конкретная и никаких перемещений влево вправо. Страница твоя собственная. Ты сам ее сделал и только ты можешь в ней хакерствовать!
Какая к черту разница между скачиваемыми с сети прогамм, которые ты ни капли не задумываясь ставишь на свой комп, а они уж точно могут все нутро твоего компа перевернуть, в отличии от макроса работающего со страницей htp или htm? Последний раз редактировалось Supermax, 21.02.2008 в 12:16. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Для тебя, возможно, разница и есть. А для антивирусника или напуганного / затра***нного админа, которому "сверху" приказали закрыть ActiveX для Internet - никакой. Браузер ты еще вызовешь. Но (afaik) создать СОМ-объект из-под скрипта не сможешь.
Скрипт-сценарий сам по себе никому не нужен. Он должен быть обработан. Так? Скрипт ловит события (неважно где) - значит, активность. Да и не просто так активность, но и с залезанием в реестр для создания СОМ-объекта. Значит, подобная деятельность может быть (и, скорее всего, и будет) расценена как вирусная. По крайней мере у меня дома на виртуалке с файерволлом и антивирусником (для ради интересу поставил 3 виртуалки, на каждой ACAD2006 Rus + SP1, Comodo / Outpost, Avast / DrWeb в разных сочетаниях, настройки - как для "запуганных", то есть по максимуму) именно так и распозналось. И моментально блокировалось. Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Ты хочешь сказать, что страничек на своем компе скоро будет не видно? Вряд ли. Как закачивались, так и будут закачиваться. Ты хочешь сказать, что СОМ технологию прикроют? Так вообще все станет. Может язык сценариев отменят, или запретят программам анализировать события, запускать собственные приложения, вообще обращаться к существующим СОМ объектам?
Давай заменим эксплорер на оперу и дело с концом. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Вряд ли замена одного браузера по умолчанию на другой решит проблему.
Похоже, мы от начальной темы уже очень далеко ушли, уж извини меня за мои лирические отступления Вот как ни крути, я все равно против подобного метода создания СОМ-объектов и работы с ними. ИМХО: каждое приложение должно выполнять свои действия, и не лезть куда не надо. Лично мне СОМ в паре с AutoCAD'ом требуется для строго определенных действий: 1. Показ "красивого" (а не нарисованного на dcl) диалогового окна (AutoCAD - СОМ-клиент, вызывает методы, описанные в dll). 2. Обращение к БД через ADO (fleming-group в полный рост) 3. Вызов стороннего exe и работа из-под этого ехе с AutoCAD'ом как СОМ-сервером (такое очень редко, но бывает нужно). Этот метод лично мне не очень нравится, но пока не переделывал.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Да мне фиолетово вообще КАК делать. Мне надо сделать макрос, работающий со страничкой Интернета. Да хоть через одно место, лишь бы сделать первый шаг. Потом можно анализировать и менять рельсы. А пока хоть как-нибудь.
Я хочу прямо из лиспа события смотреть НА СОБСТВЕННОМ КОМПЕ между прочим. |
||||
|
||||
Пытался сделать реактор на изменение свойств СОМ объекта - ничего не получилось. Хоть и vla-объект, но не Аавтокада. Не принимает его, ругается.
Сие маленькое огорчение говорит, что без внешних примочек и обращения к Автокаду через getobject для передачи инфы о проишедших событиях ничего не получится. Все любители "чистого" лиспа могут сушить весла. |
||||
|
||||
Оказывается, чтобы выполнить в Автолиспе функцию или целую программу, написанную на vbscript или jscript не обязательно создавать файл и его потом запускать. Функции прекрасно загружаются по отдельности и простенько так выполняются.
Спасибо Серому кардиналу с серого форума. Код:
Теперь проблема компиляции лиспа с vbscript-ом отпала. |
||||
|
||||
Бился я бился, то на "сером форуме", то в "мы дома" и благодаря помощи супер специалиста в области скриптовых языков WISGEST таки решил задачу про доступ из Автолиспа к объекту WScript и отслеживание событий на страничке браузера InternetExplorer.Application.
Первое - это мы создаем объект "WshScript". Разработка WISGEST подача The gray Cardinal на сером форуме. http://forum.script-coding.info/viewtopic.php?id=1187 Это три файла WshScript.wsc, WshScript.js, WshScript1.js которые кладутся в папочку system32 и регистрируется WshScript.wsc Код:
Потом пишем программу, которая представляет из себя квинтэссенцию двух языков, AutoLisp'a и VBScript. Ее написал WISGEST практически на ходу изучив Автолисп Код:
Тут вызывается браузер и при выходе из него срабатывает функция lispIE_OnQuit, выдающая сообщение "Гуд бай!" Все это можно теперь скомпелировать и работать с браузером InternetExplorer.Application как с панелью кнопок. |
||||
|
||||
Готов первый в мире вебмакрос к Автокаду!
Всем сюда: http://forum.dwg.ru/showpost.php?p=266764&postcount=13 посты №13 и 14. Последний раз редактировалось Supermax, 11.11.2008 в 12:08. |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
запуск программы из AutoCADа | kminas | Программирование | 19 | 15.06.2012 13:42 |
AutoCAD 2005 не открывает бесплатные 3Д объекты | LenkA | AutoCAD | 3 | 11.02.2009 01:52 |
Уже работаю в AutoCAD 2006, но нужна книжка чтобы знать все тонкости работы с 2D графикой. | Unt0nich | Поиск литературы, чертежей, моделей и прочих материалов | 17 | 06.05.2008 17:58 |
AUTOCAD 2006 | Aragorn | AutoCAD | 14 | 01.04.2005 00:55 |
Что нового в AutoCAD 2005 | ilka_t | AutoCAD | 40 | 19.05.2004 16:48 |