| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Объекты СОМ в AutoCAD

Объекты СОМ в AutoCAD

Ответ
Поиск в этой теме
Непрочитано 16.01.2008, 14:05 #1
Объекты СОМ в AutoCAD
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

Я думаю, что настало время завести специальную тему по поводу использования объектов СОМ технологии.
Ссылки, описания библиотек DLL, методы, свойства и прочее. Естественно в ключе использования AutoCAD-a на язывак AutoLISP и VBA.


Первая проблема:
Объект WScript.Shell
(setq svr (vlax-get-or-create-object "WScript.Shell"))
; создаем объект
(vlax-dump-object svr T)
; читаем его свойства и методы

Код:
[Выделить все]
; IWshShell3: Shell Object Interface
; Property values:
;   CurrentDirectory = ...Indexed contents not shown...
; Methods supported:
;   Exec (2)
T
Это у меня

А это у людей
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=39974nf

Код:
[Выделить все]
(defun C:TEST()
  (vl-load-com)
  (if (and
        (setq FILE (getfiled "Выберите файл для чтения" "" "csv" 16))
        (setq WS (vlax-get-or-create-object "wscript.shell"))
        )
  (vlax-invoke-method WS
    "run"
    (strcat "notepad.exe\ " FILE)
    4
    :vlax-true)
    )
  )
И это в описании
http://www.script-coding.info/WSH/WshShell.html

Библиотеки исполняемые модули вроде
wscript.exe 5.06.0000.8820
scrobj.dll 5.06.0000.8820
scrrun.dll 5.06.0000.8820
vbscript.dll 5.06.0000.8820

Но не уверен.
Кто и что скажет?

Люди! Сделайте
(vl-load-com)
(setq svr (vlax-get-or-create-object "WScript.Shell"))
(vlax-dump-object svr T)
;;; а потом
(vl-catch-all-apply '(lambda () (vlax-release-object svr)))


на своих машинах!!! Пожалуйста!!!
И скажите что видите.
Просмотров: 39463
 
Непрочитано 16.01.2008, 14:15
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


AutoCAD 2007.
Вот, что я у видел:
Код:
[Выделить все]
 
Команда: (vl-load-com)
Команда: (setq svr (vlax-get-or-create-object "WScript.Shell"))
#<VLA-OBJECT IWshShell3 00223c70>
Команда: (vlax-dump-object svr T)
; IWshShell3: Shell Object Interface
; Значения свойств:
;   CurrentDirectory = ...Индексированное содержимое не выводится...
; Поддерживаемые методы:
;   Exec (2)
T
Команда: (vl-catch-all-apply '(lambda () (vlax-release-object svr)))
0
Profan вне форума  
 
Автор темы   Непрочитано 16.01.2008, 14:25
#3
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


От блин! Спасибо 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-кой.
Supermax вне форума  
 
Непрочитано 16.01.2008, 14:37
#4
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.01.2008, 14:56
#5
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А по человечески сказать что сделать нельзя?

Такое ощущение, что WScript.Shell несколько в разных dll-ках и происходит тот кошмар, о котором гудят на форумах по скриптам. Где этот гад IWshShell3 лежит? И как его временно заткнуть?

Последний раз редактировалось Supermax, 16.01.2008 в 15:07.
Supermax вне форума  
 
Автор темы   Непрочитано 16.01.2008, 15:07
#6
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, не молчи! У тебя на машине что?
Supermax вне форума  
 
Непрочитано 16.01.2008, 15:23
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


AutoCAD 2005:
Код:
[Выделить все]
_$ (vlax-dump-Object (setq svr (vlax-get-or-create-object "wscript.shell")) t)
; IWshShell3: Shell Object Interface
; Property values:
;   CurrentDirectory = ...Indexed contents not shown...
; Methods supported:
;   Exec (2)
ADT 2006:
Код:
[Выделить все]
_$ (vlax-dump-Object (setq svr (vlax-get-or-create-object "wscript.shell")) t)
; IWshShell3: Shell Object Interface
; Значения свойств:
;   CurrentDirectory = ...Индексированное содержимое не выводится...
; Поддерживаемые методы:
;   Exec (2)
AutoCAD 2008:
Код:
[Выделить все]
_$ (vlax-dump-Object (setq svr (vlax-get-or-create-object "wscript.shell")) t)
; IWshShell3: Shell Object Interface
; Property values:
;   CurrentDirectory = ...Indexed contents not shown...
; Methods supported:
;   Exec (2)
Разницы лично я не вижу в дампах - ни у себя, ни у тебя.
А по ссылкам (особенно последней) можно посмотреть вообще все методы, которые существуют в WScript.Shell. Там и Run упоминается, в частности.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.01.2008, 16:07
#8
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Если на VBA написать:
Код:
[Выделить все]
Sub cr()
Dim obj As Object
Set obj = CreateObject("WScript.Shell")
obj.popup ("calc")
End Sub
То все работает!
Хотя свойства показывает, что одно и методов не наблюдает.
В реале свойств 3 см. выше.
VBA лезет не в system32, а в свою директорию
а в system 32 лежит тоже wshom.ocx если его переименовать, то создается вновь.

Слегка ошибся в названии wshom.ocx

Последний раз редактировалось Supermax, 16.01.2008 в 16:14.
Supermax вне форума  
 
Автор темы   Непрочитано 16.01.2008, 18:54
#9
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Все! И в лиспе заработало.
(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.
Supermax вне форума  
 
Автор темы   Непрочитано 16.01.2008, 18:58
#10
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Увы, в думпе видим фигу, а на деле и свойства все читаются (проверил) и методы работают. Более того, метод Exec имеет только один аргумент, а в думпе написано 2. Вот, какие пироги.

О последней ссылки Kpblc-a:
Это для английской версии Windows и во многом применимо только для VBA. Для лиспа, как видим из вышеописанного надо проверять всех атрибуты на обязательность и не обязательность. По другим объектам скорее всего тоже.

Последний раз редактировалось Supermax, 16.01.2008 в 19:33.
Supermax вне форума  
 
Автор темы   Непрочитано 16.01.2008, 19:36
#11
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Следующая заковыка.

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.
Supermax вне форума  
 
Непрочитано 16.01.2008, 19:50
#12
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Следующая заковыка.

ADODB.dll
----------------------------------------------------
ADODB.Connection создается
ADODB.Stream создается
создается
ADODB.Command создается
ADODB.Field не хочет создаваться
ADODB.Fields не хочет создаваться

Я думаю, что не только мне хочется добраться до ADODB.Field. Так как это сделать?
А ты сначала открывал ADODB.Recordset??
Если открывал, то код в студию...
Елпанов Евгений вне форума  
 
Непрочитано 16.01.2008, 20:31
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Для работы с ADO достаточно использовать библиотеку ADOLisp (http://fleming-group.com/, да и здесь на форуме уже несколько раз мелькала). В документации по ней описывается все что только можно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 17.01.2008, 11:42
#14
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Елпанов Евгений

(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))); освобождаем объект.

Во его свойства и методы:
Код:
[Выделить все]
; _Recordset: nil
; Property values:
;   AbsolutePage = ADODB.Recordset: Операция не допускается, если объект закрыт.
;   AbsolutePosition = ADODB.Recordset: Операция не допускается, если объект 
закрыт.
;   ActiveCommand (RO) = nil
;   ActiveConnection = nil
;   ActiveConnection (RO) = ...Indexed contents not shown...
;   BOF (RO) = ADODB.Recordset: Операция не допускается, если объект закрыт.
;   Bookmark = ADODB.Recordset: Операция не допускается, если объект закрыт.
;   CacheSize = 1
;   CursorLocation = 2
;   CursorType = 0
;   DataMember = ""
;   DataSource = #<IUnknown 05940edc>
;   EditMode (RO) = ADODB.Recordset: Операция не допускается, если объект 
закрыт.
;   EOF (RO) = ADODB.Recordset: Операция не допускается, если объект закрыт.
;   Fields (RO) = #<VLA-OBJECT Fields 05941154>
;   Filter = 0
;   Index = ""
;   LockType = 1
;   MarshalOptions = 0
;   MaxRecords = 0
;   PageCount (RO) = ADODB.Recordset: Операция не допускается, если объект 
закрыт.
;   PageSize = 10
;   Properties (RO) = #<VLA-OBJECT Properties 05941194>
;   RecordCount (RO) = ADODB.Recordset: Операция не допускается, если объект 
закрыт.
;   Sort = ""
;   Source = ""
;   Source (RO) = ...Indexed contents not shown...
;   State (RO) = 0
;   Status (RO) = ADODB.Recordset: Операция не допускается, если объект закрыт.
;   StayInSync = -1
; Methods supported:
;   AddNew (2)
;   Cancel ()
;   CancelBatch (1)
;   CancelUpdate ()
;   Clone (1)
;   Close ()
;   CompareBookmarks (2)
;   Delete (1)
;   Find (4)
;   GetRows (3)
;   GetString (5)
;   Move (2)
;   MoveFirst ()
;   MoveLast ()
;   MoveNext ()
;   MovePrevious ()
;   NextRecordset (1)
;   Open (5)
;   Requery (1)
;   Resync (2)
;   Save (2)
;   Seek (2)
;   Supports (1)
;   Update (2)
;   UpdateBatch (1)
T
Метод Open
http://www.w3schools.com/ado/met_rs_open.asp
http://translate.google.com/translat...006-40,GGLR:en

Я хотел что-нибудь открыть, да так и не решил что.

Последний раз редактировалось Supermax, 17.01.2008 в 12:58.
Supermax вне форума  
 
Непрочитано 17.01.2008, 12:12
#15
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
(setq svr (vlax-get-or-create-object "ADODB.Recordset")) ; открываем объект
Это называется не открываем, а создаем!
потом его необходимо открыть, передав ему все 5 аргументов...
Пока ты его не откроешь, у тебя нет выбранных данных!
Сам посуди, если ты создал объект Recordset , он же даже не знает, из какого файла тебе нужны данные.
А поле Fields - это и есть выбранные sql запросом данные из конкретной базы данных, из конкретной таблицы и отобранные конкретным фильтром...

Вот мой самый старый вариант программы, чтения базы данных. Даю именно этот вариант - в нем очень подробные коментарии по аргументам...

Код:
[Выделить все]
(defun GET_Value (column squl / ADOCONNECT ADORECORDSET FIELDS MASSIV)
                 ;|
By ElpanovEvgeniy
16.04.2004

(GET_VALUE '("Mat_id" "color") "SELECT * FROM Mat Where Mat_txt = 'Аморант'")

|;
 (vl-load-com)
;;;  Создаём объекты: (ADODB.Connection) и (ADODB.Recordset)
 (setq ADOConnect   (vlax-create-object "ADODB.Connection")
       ADORecordset (vlax-create-object "ADODB.Recordset")
 ) ;_ setq
;;;  Открываем (ADODB.Connection)
 (vlax-invoke-method ADOConnect
                     "Open"
                     (strcat "Driver={Microsoft Access Driver (*.mdb)};DBQ="
                             (getenv "tmp")
                             "\\tmp_Materials.mdb"
                     ) ;_ strcat
                     ;;UserName Password ADOConstant-adConnectUnspecified
                     "Admin"
                     ""
                     0
 ) ;_ vlax-invoke-method
;;;  Открываем (ADODB.Recordset)
;;;  Аргументы: тип курсора 1 (ADOConstant-adOpenKeyset)
;;;  режим блокировки записи 3 (ADOConstant-adLockOptimistic)
;;;  1  (ADOConstant-adCmdText)
 (vlax-invoke-method ADORecordset "Open" squl ADOConnect 1 3 1)
;;;  Запускаем цикл по условию окончания колонки
 (setq Fields (vlax-get-property ADORecordset "Fields"))
 (while (= (vlax-get-property ADORecordset "BOF")
           (vlax-get-property ADORecordset "EOF")
           :vlax-false
        ) ;_  =
  (setq
   massiv (cons
           (mapcar
            (function (lambda (x)
                       (vlax-variant-value
                        (vlax-get-property (vlax-get-property Fields "Item" x) "Value")
                       ) ;_ vlax-variant-value
                      ) ;_ lambda
            ) ;_ function
            column
           ) ;_ mapcar
           massiv
          ) ;_ cons
  ) ;_ setq
  (vlax-invoke-method ADORecordset "MoveNext")
 ) ;_ while
 ;;  Собираем мусор
 (vlax-invoke-method ADORecordset "Close")
 (vlax-invoke-method ADOConnect "Close")
 (vlax-release-object Fields)
 (vlax-release-object ADORecordset)
 (vlax-release-object ADOConnect)
 massiv
)
Кстати, я этот код уже выкладывал в сеть, много лет назад...

Последний раз редактировалось Елпанов Евгений, 30.08.2011 в 00:55.
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 17.01.2008, 12:36
#16
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну вот, а я думал, что тебе надо.
Это отлично, что ты выложил. Пригодится.
А почему самый старый? Самый новый что, жалко?

Поправил коментарий в посте 11
Supermax вне форума  
 
Непрочитано 17.01.2008, 13:18
#17
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Ну вот, а я думал, что тебе надо.
Это отлично, что ты выложил. Пригодится.
А почему самый старый? Самый новый что, жалко?
я не любитель библиотек, у меня каждая программа стоит на своем месте и выполняет порученную задачу, самым простым способом...
Все остальные варианты еще более специализированы, к тому же, почти без комментариев..
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 17.01.2008, 14:04
#18
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Наш человек! Я тоже не любитель библиотек. Правда 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 она не желает.

Вот ее описание:
Вложения
Тип файла: doc CDOEX.doc (373.0 Кб, 1450 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 17.01.2008, 14:06
#19
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


cdonts.dll
-------------------------------------------------
CDONTS.NewMail
CDONTS.Session

Все работает, вот описание:
Вложения
Тип файла: doc cdonts.doc (86.5 Кб, 197 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 17.01.2008, 14:09
#20
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


cdosys.dll
-----------------------------------------------
CDO.Message
CDO.DropDirectory
CDO.Configuration

CDO.DLL
-------------------------------------------------
MAPI.Session

Не рекомендую проводить эксперементы с MAPI.Session и CDO.Message с включенны интернетом и на работе с сетью. Я лчно сервак фирмы на пол часа подвесил.

Тоже работают под XP и вот их описания:
Вложения
Тип файла: doc cdosys.doc (161.5 Кб, 2828 просмотров)
Тип файла: doc CDO.doc (492.5 Кб, 907 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 17.01.2008, 14:22
#21
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Страшная штука!

ADROT.dll
-------------------------------------------------
AdRotator.AdRotator


Тут про борьбу со злом:

http://translate.google.com/translat...006-40,GGLR:en

Только почему-то там говорится про brrotate.dll и adrotate.dll на три буковки слово длиннее. Разбираться надо, однако.
Можно использовать для вывода на экран разного рода информации, если за этой dll-кой не будут охотиться сисадмины.
Описание:
Вложения
Тип файла: doc ADROT.doc (33.0 Кб, 135 просмотров)

Последний раз редактировалось Supermax, 17.01.2008 в 14:33.
Supermax вне форума  
 
Автор темы   Непрочитано 17.01.2008, 14:34
#22
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


asptxn.dll
-------------------------------------------------
ASPTxnTypeLibrary.ASPObjectContextTxNotSupported
ASPTxnTypeLibrary.ASPObjectContextTxRequired
ASPTxnTypeLibrary.ASPObjectContextTxRequiresNew
ASPTxnTypeLibrary.ASPObjectContextTxSupported

Более подробно:
http://www.webtropy.com/articles/art...TxnTypeLibrary

Описание:
Вложения
Тип файла: doc asptxn.doc (30.0 Кб, 122 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 17.01.2008, 14:39
#23
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


ASP.dll
-------------------------------------------------
ASPTypeLibrary.Application
ASPTypeLibrary.Request
ASPTypeLibrary.Response
ASPTypeLibrary.ScriptingContext
ASPTypeLibrary.Server
ASPTypeLibrary.Session

За информацией сюда:
http://www.asp.net/
и сюда:
http://www.aspnetmania.com/


Описание:
Вложения
Тип файла: doc ASP.doc (93.0 Кб, 295 просмотров)

Последний раз редактировалось Supermax, 17.01.2008 в 14:49.
Supermax вне форума  
 
Автор темы   Непрочитано 17.01.2008, 15:16
#24
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


browscap.dll
---------------------------------------------------
BrowserType.BrowserCap

http://www.dll-files.ru/dll/b/browscap.dll.html

Описание:
Вложения
Тип файла: doc browscap.doc (28.0 Кб, 104 просмотров)

Последний раз редактировалось Supermax, 28.02.2008 в 13:25.
Supermax вне форума  
 
Автор темы   Непрочитано 17.01.2008, 15:17
#25
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


CertMap.ocx
--------------------------------------------------
CERTMAPLib.CertAuth
CERTMAPLib.Certmap

Описание:
Вложения
Тип файла: doc CertMap.doc (33.0 Кб, 114 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 18.01.2008, 12:50
#26
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


CertWiz.ocx
---------------------------------------------------
CERTWIZLib.CertWiz

Описание:
Вложения
Тип файла: doc CertWiz.doc (26.0 Кб, 115 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 18.01.2008, 12:51
#27
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Cnfgprts.ocx
---------------------------------------------------
CNFGPRTSLib.Apps
CNFGPRTSLib.LogUI
CNFGPRTSLib.Rat

Описание:
Вложения
Тип файла: doc Cnfgprts.doc (35.5 Кб, 113 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 18.01.2008, 12:52
#28
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


ContRot.dll
--------------------------------------------------
ContentRotator.ContentRotator

Описание:
Вложения
Тип файла: doc ContRot.doc (28.5 Кб, 122 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 18.01.2008, 12:53
#29
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


counters.dll
-------------------------------------------------
Counters.Counters

Описание:
Вложения
Тип файла: doc counters.doc (29.5 Кб, 104 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 18.01.2008, 12:54
#30
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


logscrpt.dll
------------------------------------------------
IISLog.LogScripting

Описание:
Вложения
Тип файла: doc logscrpt.doc (42.0 Кб, 128 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 18.01.2008, 12:57
#31
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


mdsync.dll
------------------------------------------------
MDSYNCLib.MdSync
MDSYNCLib.regc

Описание:
Вложения
Тип файла: doc mdsync.doc (32.5 Кб, 135 просмотров)
Supermax вне форума  
 
Непрочитано 18.01.2008, 13:01
#32
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


А можно ли с помощью COM добраться из Лиспа до подшивок Акада (2006)?
Типа как (setq svr (vlax-get-or-create-object "Sheetset")), а дальше получить доступ к свойствам и методам?
kp+ вне форума  
 
Автор темы   Непрочитано 18.01.2008, 15:08
#33
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


О каких подшивках идет речь?

"Sheetset" это не СОМ объект.
Supermax вне форума  
 
Непрочитано 18.01.2008, 15:57
#34
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Справка разработчика (ADT 2006) говорит следующее:
Цитата:
Overview of Sheet Set Manager Objects The Sheet Set Manager
API is based on a set of COM objects. You can use the COM objects of the Sheet Set Manager to develop macros and applications that create sheet sets and perform related tasks.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.01.2008, 16:07
#35
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


ну оговорился я. действительно, не sheetset, а sheetsetmanager. не судите строго.
Лучше поскажите, PLS, как правильно записать на лиспе создание этого COM-объекта. У меня почему-то не получилось
kp+ вне форума  
 
Автор темы   Непрочитано 19.01.2008, 13:11
#36
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


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.
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 13:30
#37
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


СОМ объект, это массив данных в оперативной памяти машины (включая в понятие "оперативная память" и временные файлы), которые понимается как объект, то есть имеет свойства, допускает или не допускает применение к себе различных методов и после этого реагирует определенным образом на эти действия.
Чтобы его создать нужна программа с расширением *.exe Которая пользуясь алгоритмом создания, написанного либо прямо в ней, либо в библиотеке *.dll создает такой объект.
От того, что вы положили себе в машину dll-ку - никаких объектов не появится. И даже если вы положили программу, работающую с ними, но не запустили ее - тоже, объектов не найдете. Зарегистрировать эту dll-ку вы сможете, только если в реестре есть указание на программу, которая с ней работает.
AutoCAD тоже является такой программой и некоторые объекты он создает, только если его заставить это сделать. Все вышеперечисленные объекты таковыми и являются.

Функция vlax-get-or-create-object не создает объект!!! Она вычисляет указатель (VLA-объект), или создает указатель, да и то, только для внешнего приложения!

Цитирую Полещука:
Цитата:
6.3.10. Функция vlax-get-or-create-object
Вычисляет указатель объекта внешнего приложения или создает его, если такого указателя не было (т. е. приложение еще не стартовало).
Приложение объект создает, а функция - на него указатель.

Аминь.

Последний раз редактировалось Supermax, 19.01.2008 в 13:40.
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 13:54
#38
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


myinfo.dll
------------------------------------------------
MyInfo.MyInfo

Описание:
Вложения
Тип файла: doc myinfo.doc (27.5 Кб, 119 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 13:55
#39
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


NEXTLINK.dll
------------------------------------------------
NextLink.NextLink

Описание:
Вложения
Тип файла: doc NEXTLINK.doc (37.0 Кб, 116 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 13:57
#40
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


PageCnt.dll
------------------------------------------------
PageCounter.PageCounter

Описание:
Вложения
Тип файла: doc PageCnt.doc (30.0 Кб, 108 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 13:58
#41
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


PermChk.dll
------------------------------------------------
PermissionChecker.PermissionChecker

Описание:
Вложения
Тип файла: doc PermChk.doc (29.5 Кб, 154 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 13:59
#42
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


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

Описание:
Вложения
Тип файла: doc seo.doc (182.0 Кб, 197 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 14:00
#43
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


smtpadm.dll
--------------------------------------------------
SMTPADMLib.CSmtpAdmin
SMTPADMLib.CSmtpAdminAlias
SMTPADMLib.CSmtpAdminDL
SMTPADMLib.CSmtpAdminDomain
SMTPADMLib.CSmtpAdminService
SMTPADMLib.CSmtpAdminSessions
SMTPADMLib.CSmtpAdminUser
SMTPADMLib.CSmtpAdminVirtualDirectory
SMTPADMLib.CSmtpAdminVirtualServer
SMTPADMLib.CWebAdminHelper

Описание:
Вложения
Тип файла: doc smtpadm.doc (270.5 Кб, 238 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 14:01
#44
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


status.dll
--------------------------------------------------
Status.Status

Описание:
Вложения
Тип файла: doc status.doc (29.5 Кб, 146 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 14:02
#45
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


tools.dll
--------------------------------------------------
Tools.Tools
Tools.ToolsResponse

Описание:
Вложения
Тип файла: doc tools.doc (35.5 Кб, 153 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 14:04
#46
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


mshtml.tlb
--------------------------------------------------
MSHTML.BlockFormats
MSHTML.CEventObj
MSHTML.CMimeTypes
MSHTML.COpsProfile
MSHTML.CPlugins
MSHTML.DOMChildrenCollection
MSHTML.FontNames
MSHTML.FramesCollection
MSHTML.HTCAttachBehavior дописать

Описание:
Вложения
Тип файла: rar mshtml.rar (184.1 Кб, 448 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 14:06
#47
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


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.
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 18:39
#48
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Не зря я целый день потратил на ковыряние реестра.
Нашел интересную и очень полезную весч.

mscomctl.ocx
------------------------------------
MSComctlLib.Toolbar

Вот его думп:
Код:
[Выделить все]
; IToolbar: Microsoft Toolbar Control
; Property values:
;   AllowCustomize = ...Indexed contents not shown...
;   Appearance = ...Indexed contents not shown...
;   BorderStyle = ...Indexed contents not shown...
;   ButtonHeight = ...Indexed contents not shown...
;   Buttons = ...Indexed contents not shown...
;   ButtonWidth = ...Indexed contents not shown...
;   Controls (RO) = ...Indexed contents not shown...
;   DisabledImageList = ...Indexed contents not shown...
;   DisabledImageList (RO) = ...Indexed contents not shown...
;   Enabled = ...Indexed contents not shown...
;   HelpContextID = ...Indexed contents not shown...
;   HelpFile = ...Indexed contents not shown...
;   HotImageList = ...Indexed contents not shown...
;   HotImageList (RO) = ...Indexed contents not shown...
;   hWnd = ...Indexed contents not shown...
;   ImageList = ...Indexed contents not shown...
;   ImageList (RO) = ...Indexed contents not shown...
;   MouseIcon = ...Indexed contents not shown...
;   MouseIcon (RO) = ...Indexed contents not shown...
;   MousePointer = ...Indexed contents not shown...
;   OLEDropMode = ...Indexed contents not shown...
;   ShowTips = ...Indexed contents not shown...
;   Style = ...Indexed contents not shown...
;   TextAlignment = ...Indexed contents not shown...
;   Wrappable = ...Indexed contents not shown...
; Methods supported:
;   Customize ()
;   OLEDrag ()
;   Refresh ()
;   RestoreToolbar (3)
;   SaveToolbar (3)
T
Как говорится "без слов"
Supermax вне форума  
 
Непрочитано 19.01.2008, 19:03
#49
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


[q]Пример работы на VBA - сюда:
http://www.augi.com/education/auhand...005/CP15-1.pdf[/q]
Архиполезная ссылка! Спасибо!!!
Жаль, что с подшивками вообще нельзя работать через ЛИСП. Придется всерьез учить VBA
kp+ вне форума  
 
Автор темы   Непрочитано 19.01.2008, 19:17
#50
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ты че? Нельзя в субботу работать!
Русским языком написано:
Цитата:
'' Open a Sheet Set file
Dim oSheetDb As AcSmDatabase
Set oSheetDb = oSheetSetMgr.CreateDatabase("C:\Documents and Settings\<user name>\My Documents\AutoCAD
Sheet Sets\CP15-1 AU2005.dst", "")
У тебя по этому пути что лежит?
У меня - пустая папка AutoCAD Sheet Sets.
Вот ты файлец CP15-1 AU2005.dst сначала создай, а потом к нему и подбирайся.
Supermax вне форума  
 
Автор темы   Непрочитано 19.01.2008, 19:28
#51
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Там рядышком еще три вещицы есть:
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.
Supermax вне форума  
 
Непрочитано 19.01.2008, 21:23
#52
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.01.2008, 13:07
#53
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, если у тебя лично есть какие-нибудь описания COM объектов, хоть свои, хоть чьи-то, то клади сюда.

Вот списал с реестра список доступных СОМ объектов самого AutoCAD-a:

Для 207 и 2008-го

Код:
[Выделить все]
AutoCAD.AcadLayerStateManager.17
AutoCAD.AcCmColor.17
AutoCAD.Application.17
AutoCAD.Application.17.1
AutoCAD.AxMPolygonObj.17
AutoCAD.Drawing.17
AutoCAD.OCDefaultStorage.17
AutoCAD.OCDefinitionFile.17
AutoCAD.OCEntityTag.17
AutoCAD.OCPropertySourceManager.17
AutoCAD.RenderEditSpin.17
AutoCAD.SecurityParams.17
Для 2006-го

Код:
[Выделить все]
AutoCAD.AcadLayerStateManager.16
AutoCAD.AcCmColor.16
AutoCAD.Application
AutoCAD.Application.16.1
AutoCAD.Application.16.2
AutoCAD.AxMPolygonObj16.2
AutoCAD.Drawing.16
AutoCAD.OCDefaultStorage.16
AutoCAD.OCDefinitionFile.16
AutoCAD.OCEntityTag.16
AutoCAD.OCPropertySourceManager.16
AutoCAD.SecurityParams.16
А это вообще крутизна какая-то

Код:
[Выделить все]
Autodesk.AutoCAD.Interop.Common.Ac3DPolylineType
Autodesk.AutoCAD.Interop.Common.AcActiveSpace
Autodesk.AutoCAD.Interop.Common.ACAD_COLOR
Autodesk.AutoCAD.Interop.Common.ACAD_LWEIGHT
Autodesk.AutoCAD.Interop.Common.AcadSecurityParamsConstants
Autodesk.AutoCAD.Interop.Common.AcadSecurityParamsType
Autodesk.AutoCAD.Interop.Common.AcAlignment
Autodesk.AutoCAD.Interop.Common.AcAlignmentPointAcquisition
Autodesk.AutoCAD.Interop.Common.AcAngleUnits
Autodesk.AutoCAD.Interop.Common.AcARXDemandLoad
Autodesk.AutoCAD.Interop.Common.AcAttachmentPoint
Autodesk.AutoCAD.Interop.Common.AcAttributeMode
Autodesk.AutoCAD.Interop.Common.AcBlockScaling
Autodesk.AutoCAD.Interop.Common.AcBoolean
Autodesk.AutoCAD.Interop.Common.AcBooleanType
Autodesk.AutoCAD.Interop.Common.AcCellAlignment
Autodesk.AutoCAD.Interop.Common.AcCellEdgeMask
Autodesk.AutoCAD.Interop.Common.AcCellType
Autodesk.AutoCAD.Interop.Common.AcColor
Autodesk.AutoCAD.Interop.Common.AcColorMethod
Autodesk.AutoCAD.Interop.Common.AcCoordinateSystem
Autodesk.AutoCAD.Interop.Common.AcDimArcLengthSymbol
Autodesk.AutoCAD.Interop.Common.AcDimArrowheadType
Autodesk.AutoCAD.Interop.Common.AcDimCenterType
Autodesk.AutoCAD.Interop.Common.AcDimFit
Autodesk.AutoCAD.Interop.Common.AcDimFractionType
Autodesk.AutoCAD.Interop.Common.AcDimHorizontalJustification
Autodesk.AutoCAD.Interop.Common.AcDimLUnits
Autodesk.AutoCAD.Interop.Common.AcDimPrecision
Autodesk.AutoCAD.Interop.Common.AcDimTextMovement
Autodesk.AutoCAD.Interop.Common.AcDimToleranceJustify
Autodesk.AutoCAD.Interop.Common.AcDimToleranceMethod
Autodesk.AutoCAD.Interop.Common.AcDimUnits
Autodesk.AutoCAD.Interop.Common.AcDimVerticalJustification
Autodesk.AutoCAD.Interop.Common.AcDragDisplayMode
Autodesk.AutoCAD.Interop.Common.AcDrawingAreaSCMCommand
Autodesk.AutoCAD.Interop.Common.AcDrawingAreaSCMDefault
Autodesk.AutoCAD.Interop.Common.AcDrawingAreaSCMEdit
Autodesk.AutoCAD.Interop.Common.AcDrawingAreaShortCutMenu
Autodesk.AutoCAD.Interop.Common.AcDrawingDirection
Autodesk.AutoCAD.Interop.Common.AcDynamicBlockReferencePropertyUnitsType
Autodesk.AutoCAD.Interop.Common.AcEntityName
Autodesk.AutoCAD.Interop.Common.AcExtendOption
Autodesk.AutoCAD.Interop.Common.AcGradientPatternType
Autodesk.AutoCAD.Interop.Common.AcGridLineType
Autodesk.AutoCAD.Interop.Common.AcHatchObjectType
Autodesk.AutoCAD.Interop.Common.AcHatchStyle
Autodesk.AutoCAD.Interop.Common.AcHorizontalAlignment
Autodesk.AutoCAD.Interop.Common.AcInsertUnits
Autodesk.AutoCAD.Interop.Common.AcInsertUnitsAction
Autodesk.AutoCAD.Interop.Common.AcISOPenWidth
Autodesk.AutoCAD.Interop.Common.AcKeyboardAccelerator
Autodesk.AutoCAD.Interop.Common.AcKeyboardPriority
Autodesk.AutoCAD.Interop.Common.AcLayerStateMask
Autodesk.AutoCAD.Interop.Common.AcLeaderType
Autodesk.AutoCAD.Interop.Common.AcLineSpacingStyle
Autodesk.AutoCAD.Interop.Common.AcLineWeight
Autodesk.AutoCAD.Interop.Common.AcLoadPalette
Autodesk.AutoCAD.Interop.Common.AcLoopType
Autodesk.AutoCAD.Interop.Common.AcMeasurementUnits
Autodesk.AutoCAD.Interop.Common.AcMenuFileType
Autodesk.AutoCAD.Interop.Common.AcMenuGroupType
Autodesk.AutoCAD.Interop.Common.AcMenuItemType
Autodesk.AutoCAD.Interop.Common.AcMLineJustification
Autodesk.AutoCAD.Interop.Common.AcOlePlotQuality
Autodesk.AutoCAD.Interop.Common.AcOleQuality
Autodesk.AutoCAD.Interop.Common.AcOleType
Autodesk.AutoCAD.Interop.Common.AcOnOff
Autodesk.AutoCAD.Interop.Common.AcPatternType
Autodesk.AutoCAD.Interop.Common.AcPlotOrientation
Autodesk.AutoCAD.Interop.Common.AcPlotPaperUnits
Autodesk.AutoCAD.Interop.Common.AcPlotPolicy
Autodesk.AutoCAD.Interop.Common.AcPlotPolicyForLegacyDwgs
Autodesk.AutoCAD.Interop.Common.AcPlotPolicyForNewDwgs
Autodesk.AutoCAD.Interop.Common.AcPlotRotation
Autodesk.AutoCAD.Interop.Common.AcPlotScale
Autodesk.AutoCAD.Interop.Common.AcPlotType
Autodesk.AutoCAD.Interop.Common.AcPolylineType
Autodesk.AutoCAD.Interop.Common.AcPolymeshType
Autodesk.AutoCAD.Interop.Common.AcPreviewMode
Autodesk.AutoCAD.Interop.Common.AcPrinterSpoolAlert
Autodesk.AutoCAD.Interop.Common.AcProxyImage
Autodesk.AutoCAD.Interop.Common.AcRegenType
Autodesk.AutoCAD.Interop.Common.AcRotationAngle
Autodesk.AutoCAD.Interop.Common.AcRowType
Autodesk.AutoCAD.Interop.Common.AcSaveAsType
Autodesk.AutoCAD.Interop.Common.AcSelect
Autodesk.AutoCAD.Interop.Common.AcSelectType
Autodesk.AutoCAD.Interop.Common.AcShadePlot
Autodesk.AutoCAD.Interop.Common.AcTableDirection
Autodesk.AutoCAD.Interop.Common.AcTableStyleOverrides
Autodesk.AutoCAD.Interop.Common.AcTextFontStyle
Autodesk.AutoCAD.Interop.Common.AcTextGenerationFlag
Autodesk.AutoCAD.Interop.Common.AcToolbarDockStatus
Autodesk.AutoCAD.Interop.Common.AcToolbarItemType
Autodesk.AutoCAD.Interop.Common.AcUnits
Autodesk.AutoCAD.Interop.Common.AcVerticalAlignment
Autodesk.AutoCAD.Interop.Common.AcViewportScale
Autodesk.AutoCAD.Interop.Common.AcViewportSplitType
Autodesk.AutoCAD.Interop.Common.AcWindowState
Autodesk.AutoCAD.Interop.Common.AcXRefDemandLoad
Autodesk.AutoCAD.Interop.Common.AcZoomScaleType
Все создается, только вот с последним списком думп не очень хочет делать, но не со всеми, с некоторыми делает полностью.

Где бы почитать про них?
Supermax вне форума  
 
Автор темы   Непрочитано 25.01.2008, 13:27
#54
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А, уже прочел.
Последний список - это свойства выбранных объектов.
Поем и продолжу.
Supermax вне форума  
 
Непрочитано 25.01.2008, 13:33
#55
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Цитата:
Сообщение от Supermax Посмотреть сообщение
Kpblc, если у тебя лично есть какие-нибудь описания COM объектов, хоть свои, хоть чьи-то, то клади сюда.
Ну в своих я смысла мало вижу, они достаточно кривовато написаны Ну кому интересен вариант чтения/записи в ini-файл через СОМ, когда это абсолютно спокойно делается "чистым" visual lisp? Вот с XMLParser'ом разобраться можно было бы, если б не то, что для каждой версии .NET он хоть немного, но "другой" - я на augi на этом накололся
Цитата:
Сообщение от Supermax Посмотреть сообщение
Вот списал с реестра список доступных СОМ объектов самого AutoCAD-a:<...>Где бы почитать про них?
В справке разработчика AutoCAD'a описано все это. А что не описано - есть в ObjectARX SDK. Смысла в обращении к AutoCAD через СОМ из-под самого AutoCAD лично я не вижу. Это может требоваться при работе из-под Excel'a, к примеру. Но и тут тоже не все гладко (связано с методом связывания - ранним или поздним). Если интересно мое видение этого кусочка, могу рассказать (возможно, я ошибаюсь, но пока моя точка зрения капитальных промахов не давала).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.01.2008, 15:28
#56
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


На русском языке и под рукой никаких описаний нет,

Вот Думп всех СОМ самого Автокада:
(может пригодится тем, кто пишет на VBA)

Код:
[Выделить все]
AutoCAD.Application.17
--------------------------------------
; IAcadApplication: An instance of the AutoCAD application
; Property values:
;   ActiveDocument = #<VLA-OBJECT IAcadDocument 06a10950>
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>
;   Caption (RO) = "AutoCAD 2008 - [Drawing1.dwg]"
;   Documents (RO) = #<VLA-OBJECT IAcadDocuments 014a39f0>
;   FullName (RO) = "C:\\Program Files\\AutoCAD 2008\\acad.exe"
;   Height = 1032
;   HWND (RO) = 984012
;   LocaleId (RO) = 1033
;   MenuBar (RO) = #<VLA-OBJECT IAcadMenuBar 06cdef0c>
;   MenuGroups (RO) = #<VLA-OBJECT IAcadMenuGroups 014f6f98>
;   Name (RO) = "AutoCAD"
;   Path (RO) = "C:\\Program Files\\AutoCAD 2008"
;   PreferencesInitializing VBA System... (RO) = #<VLA-OBJECT IAcadPreferences 01f32324>
;   StatusId (RO) = ...Indexed contents not shown...
;   VBE (RO) = #<VLA-OBJECT VBE 09c817c4>
;   Version (RO) = "17.1s (LMS Tech)"
;   Visible = -1
;   Width = 1288
;   WindowLeft = -1284
;   WindowState = 3
;   WindowTop = -4
; Methods supported:
;   Eval (1)
;   GetAcadState ()
;   GetInterfaceObject (1)
;   ListArx ()
;   LoadArx (1)
;   LoadDVB (1)
;   Quit ()
;   RunMacro (1)
;   UnloadArx (1)
;   UnloadDVB (1)
;   Update ()
;   ZoomAll ()
;   ZoomCenter (2)
;   ZoomExtents ()
;   ZoomPickWindow ()
;   ZoomPrevious ()
;   ZoomScaled (2)
;   ZoomWindow (2)

AutoCAD.AcCmColor.17
----------------------------------------
; IAcadAcCmColor: AutoCAD AcCmColor Interface
; Property values:
;   Blue (RO) = 0
;   BookName (RO) = ""
;   ColorIndex = 256
;   ColorMethod = 192
;   ColorName (RO) = ""
;   EntityColor = -1073741824
;   Green (RO) = 0
;   Red (RO) = 0
; Methods supported:
;   Delete ()
;   SetColorBookColor (2)
;   SetNames (2)
;   SetRGB (3)

AutoCAD.AxMPolygonObj.17
----------------------------------------------
; IAcMPolygon: AcMPolygon Interface
; Property values:
;   Angle = AutoCAD.AxMPolygonObj.17: Invalid argument.
;   Application (RO) = Ошибка
;   Area (RO) = AutoCAD.AxMPolygonObj.17: Invalid argument.
;   Document (RO) = AutoCAD.Application: No database
;   Double = AutoCAD.AxMPolygonObj.17: Invalid argument.
;   Elevation = AutoCAD.AxMPolygonObj.17: Invalid argument.
;   GradientAngle = Ошибка
;   GradientCentered = Ошибка
;   GradientColor1 = Ошибка
;   GradientColor2 = Ошибка
;   GradientName = Ошибка
;   Handle (RO) = AutoCAD.Application: Invalid class
;   HasExtensionDictionary (RO) = AutoCAD.Application: Invalid class
;   Hyperlinks (RO) = AutoCAD.Application: Null object ID
;   Layer = AutoCAD.Application: Invalid class
;   Linetype = AutoCAD.Application: Invalid class
;   LinetypeScale = AutoCAD.Application: Invalid class
;   Lineweight = AutoCAD.Application: Invalid class
;   Material = AutoCAD.Application: Invalid class
;   ObjectID (RO) = 0
;   ObjectName (RO) = AutoCAD.Application: Invalid class
;   OwnerID (RO) = AutoCAD.Application: Invalid class
;   PatternFillTrueColor = ; error: Unknown exception occurred
; warning: unwind skipped on unknown exception

AutoCAD.Drawing.17
---------------------------------------------
; IAcadDocument: An AutoCAD drawing
; Property values:
;   Active (RO) = 0
;   ActiveDimStyle = #<VLA-OBJECT IAcadDimStyle 01f00bbc>
;   ActiveLayer = #<VLA-OBJECT IAcadLayer 01f0011c>
;   ActiveLayout = #<VLA-OBJECT IAcadLayout 01f00a7c>
;   ActiveLinetype = #<VLA-OBJECT IAcadLineType 01f009dc>
;   ActiveMaterial = #<VLA-OBJECT IAcadMaterial 01efff3c>
;   ActivePViewport = AutoCAD: No active viewport in paperspace
;   ActiveSelectionSet (RO) = #<VLA-OBJECT IAcadSelectionSet 01f4821c>
;   ActiveSpace = 1
;   ActiveTextStyle = #<VLA-OBJECT IAcadTextStyle 01effeec>
;   ActiveUCS = AutoCAD: Null object ID
;   ActiveViewport = #<VLA-OBJECT IAcadViewport 01f0089c>
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>
;   Blocks (RO) = #<VLA-OBJECT IAcadBlocks 01f0052c>
;   Database (RO) = #<VLA-OBJECT IAcadDatabase 01f46fec>
;   Dictionaries (RO) = #<VLA-OBJECT IAcadDictionaries 01efffdc>
;   DimStyles (RO) = #<VLA-OBJECT IAcadDimStyles 01f00acc>
;   ElevationModelSpace = 0.0
;   ElevationPaperSpace = 0.0
;   FileDependencies (RO) = #<VLA-OBJECT IAcadFileDependencies 01f732c4>
;   FullName (RO) = ""
;   Groups (RO) = #<VLA-OBJECT IAcadGroups 01f005cc>
;   Height = 580
;   HWND (RO) = 3474260
;   Layers (RO) = #<VLA-OBJECT IAcadLayers 069d7fb4>
;   Layouts (RO) = #<VLA-OBJECT IAcadLayouts 069d7f14>
;   Limits = (0.0 0.0 420.0 297.0)
;   Linetypes (RO) = #<VLA-OBJECT IAcadLineTypes 069d7ec4>
;   Materials (RO) = #<VLA-OBJECT IAcadMaterials 069d7e74>
;   ModelSpace (RO) = #<VLA-OBJECT IAcadModelSpace2 069d7d34>
;   MSpace = AutoCAD: Invalid mode
;   Name (RO) = "Drawing2.dwg"
;   ObjectSnapMode = 0
;   PaperSpace (RO) = #<VLA-OBJECT IAcadPaperSpace2 069d7ce4>
;   Path (RO) = "C:\\Documents and Settings\\Андрей\\Мои документы"
;   PickfirstSelectionSet (RO) = #<VLA-OBJECT IAcadSelectionSet 01f47d0c>
;   Plot (RO) = #<VLA-OBJECT IAcadPlot 01f73fc4>
;   PlotConfigurations (RO) = #<VLA-OBJECT IAcadPlotConfigurations 069d7bf4>
;   Preferences (RO) = #<VLA-OBJECT IAcadDatabasePreferences 01f73bac>
;   ReadOnly (RO) = 0
;   RegisteredApplications (RO) = #<VLA-OBJECT IAcadRegisteredApplications 69d7c44>
;   Saved (RO) = -1
;   SectionManager (RO) = Ошибка
;   SelectionSets (RO) = #<VLA-OBJECT IAcadSelectionSets 01f1dfac>
;   SummaryInfo (RO) = #<VLA-OBJECT IAcadSummaryInfo 01f73a1c>
;   TextStyles (RO) = #<VLA-OBJECT IAcadTextStyles 069d7ba4>
;   UserCoordinateSystems (RO) = #<VLA-OBJECT IAcadUCSs 069d7b04>
;   Utility (RO) = #<VLA-OBJECT IAcadUtility 0a420124>
;   Viewports (RO) = #<VLA-OBJECT IAcadViewports 069d7ab4>
;   Views (RO) = #<VLA-OBJECT IAcadViews 069d7a64>
;   Width = 1169
;   WindowState = 1
;   WindowTitle (RO) = "Drawing2.dwg"
; Methods supported:
;   Activate ()
;   AuditInfo (1)
;   Close (2)
;   CopyObjects (3)
;   EndUndoMark ()
;   Export (3)
;   GetVariable (1)
;   HandleToObject (1)
;   Import (3)
;   LoadShapeFile (1)
;   New (1)
;   ObjectIdToObject (1)
;   Open (2)
;   PurgeAll ()
;   Regen (1)
;   Save ()
;   SaveAs (3)
;   SendCommand (1)
;   SetVariable (2)
;   StartUndoMark ()
;   Wblock (2)


AutoCAD.OCDefaultStorage.17
------------------------------------------------------
; IOCDefaultStorage: IOCDefaultStorage Interface
; No properties
; Methods supported:
;   CreateStorage (6)
;   FindProperties (5)
;   GetReadOnly (5)
;   GetValue (5)
;   RemoveStorage (4)
;   SetReadOnly (5)
;   SetValue (7)

AutoCAD.OCDefinitionFile.17
---------------------------------------------------------
; IOCDefinitionFile: IOCDefinitionFile Interface
; No properties
; Methods supported:
;   CreateEmpty (1)
;   FindAttached (2)
;   GetStoredAttached (1)
;   SetStoredAttached (2)

AutoCAD.OCEntityTag.17
---------------------------------------------------------
; IOCEntityTag: IOCEntityTag Interface
; No properties
; Methods supported:
;   Audit (3)
;   Clear (2)
;   CopyAllTags (2)
;   FindAllTags (2)
;   FindTag (2)
;   MoveAllTags (2)
;   Tag (6)

AutoCAD.OCPropertySourceManager.17
------------------------------------------------------------
nil

AutoCAD.RenderEditSpin.17
-----------------------------------------------------------
; Object does not support ITypeInfo interface
nil

AutoCAD.SecurityParams.17
---------------------------------------------------------
; IAcadSecurityParams: Security Parameters Interface
; Property values:
;   Action = 0
;   Algorithm = 0
;   Comment = ""
;   Issuer = ""
;   KeyLength = 0
;   Password = ""
;   ProviderName = ""
;   ProviderType = 0
;   SerialNumber = ""
;   Subject = ""
;   TimeServer = ""
; No methods
Никак не разберусь с AutoCAD.OCPropertySourceManager.17

Что надо, чтобы он заработал?
Supermax вне форума  
 
Автор темы   Непрочитано 25.01.2008, 17:33
#57
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


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" с четырьмя параметрами. А если точнее, то четвертый - обязательный. Никак не подберу. Первые три вообще пустую строку пропукают, а четвертый чего-то хочет, но чего - не врублюсь. Может кто по аналогии может угадать? Ну что нужно, чтобы вызвать окно выбора файла?

И где взять описание этих объектов?

Сразу даю лисп для ускорения поиска четвертого аргумента.

Код:
[Выделить все]
(vl-load-com)
(setq svr (vlax-get-or-create-object "AdCommon.ADFileOpenDialog")); Получаем указатель на объект
(vlax-dump-object svr T); Получает распечатку свойств и методов
(vlax-invoke-method svr "ShowFileOpenDialog" "" "" "" "???"); Пытемся открыть окно выбора файла
(vlax-get-property svr "TargetFile"); Пытаемся прочесть выбранные файлы
(vl-catch-all-apply '(lambda () (vlax-release-object svr))); отпускаем объект.

Последний раз редактировалось Supermax, 25.01.2008 в 17:39.
Supermax вне форума  
 
Непрочитано 25.01.2008, 23:35
#58
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.01.2008, 00:53
#59
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Мне интересно, где ты нашел эту dll и каково ее полное имя? Посмотри на аттачи (сделано в VB6.0)
Миниатюры
Нажмите на изображение для увеличения
Название: 2008-01-26_004833.jpg
Просмотров: 209
Размер:	56.9 Кб
ID:	2655  
Изображения
Тип файла: png 2008-01-26_004834.png (31.5 Кб, 1813 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.01.2008, 14:42
#60
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Все нашел в реестре.

Вот более подробная инфа из реестра по AdCommon:

Код:
[Выделить все]
AdCommon.dll
--------------------------------------------------------
AdCommon.AdFileOpenDialog		InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdHistoryManager		InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdOptionsDialog		InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdParam			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdPoint 			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdPoint3D			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdProperty			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdServiceHandlerFinder		InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdStringPair			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdTempFileMgr			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdToggle			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdTransform			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdUrlUtility			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.AdViewerUtility		InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.Collection			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.Collection2			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll
AdCommon.Rect			InprocServer32 - C:\Program Files\Common Files\Autodesk Shared\dwf Common\AdCommon.dll

Объекты не имеющие InprocServer32 в реестре и не дающие указатель в пустом файле DWG. 

AdCommon.AdDropTarget
AdCommon.AdDropTarget.1
AdCommon.AdDwfImportManager
AdCommon.AdDwfImportManager.1
AdCommon.AdStreamLength
AdCommon.AdStreamLength.1


Объекты не имеющие InprocServer32 в реестре и дающие указатель в пустом файле DWG. 

AdCommon.AdApiCollection
AdCommon.AdApiCollection.1
AdCommon.AdColor
AdCommon.AdColor.1
AdCommon.AdDREModelOptionsTab
AdCommon.AdDREModelOptionsTab.1
AdCommon.AdDREPlotOptionsTab
AdCommon.AdDREPlotOptionsTab.1
AdCommon.AdDRGeneralOptionsTab
AdCommon.AdDRGeneralOptionsTab.1
AdCommon.AdEModelOptionsTab
AdCommon.AdEModelOptionsTab.1
AdCommon.AdEPlotOptionsTab
AdCommon.AdEPlotOptionsTab.1
AdCommon.AdGeneralOptionsTab
AdCommon.AdGeneralOptionsTab.1
AdCommon.AdHtmlUtility
AdCommon.AdHtmlUtility.1
AdCommon.AdInstance
AdCommon.AdInstance.1
AdCommon.AdPrintDialog
AdCommon.AdPrintDialog.1
AdCommon.UserCollection
AdCommon.UserCollection.1

Последний раз редактировалось Supermax, 26.01.2008 в 14:50.
Supermax вне форума  
 
Автор темы   Непрочитано 28.01.2008, 13:28
#61
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Стал изучать 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 и возвратом значения выбранного, да чтобы еще и окно можно было растягивать - глухо как в танке.

Ищу, блин, короче.
Supermax вне форума  
 
Непрочитано 28.01.2008, 13:45
#62
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Цитата:
СОМ объекты создаются в памяти машины только исполняемыми модулями *.exe или *.com.
Необязательно. СОМ-объект может создаваться другим СОМ-объектом.
Цитата:
Чтобы в памяти создался COM объект программа должна иметь данные о нем.
Программа ничего о нем может не знать, в отличие от операционной системы.
Значит так. Насчет Scripting Object и ему подобных - см. ПМ.
На предмет окна открытия файла - я говорил, что тут надо или писать собственный СОМ, или на .NET / arx делать подгружаемое приложение, или рисовать стороннее ехе-приложение.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.01.2008, 14:05
#63
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
Программа ничего о нем может не знать, в отличие от операционной системы.
Это как сказать. Если те exe-шники, что идут в комплекте с самой операционной системой, к примеру тот же regsvr32 считать неотъемлемой частью самой операционной системы - то да, согласен, а если не считать, то чистая оперативка сама ничего не создаст.
С другой стороны, без них она и сама не загрузится.

Естественно, если в программе нет собственного модуля создания СОМ, а используется дополнительный ехе-шник, то программа не содержит не только сведений о структуре СОМ (в dll-ке лежит), но и сама его не создает. Опять же считать прилагаемые ехе-шники неотъемлемой частью программы или нет?

Короче пошла философия.
Supermax вне форума  
 
Автор темы   Непрочитано 31.01.2008, 13:10
#64
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Пытаюсь создать прогу на лиспе, в которой в качестве подпрограммы была бы выполнена программа на WBScript. Алгоритм следующий:
Создаем временный объект Техт, и создаем реактор на его изменение. Запускаем через DwgRu-WScript-Exec или DwgRu-WScript-Run скрипт-файл, который заканчивается обращением к AutoCAD.Application.17 или 16, а то и просто без цифр (пока не решил, скорее всего будет автоматическая настройка по результатам опроса версии када), находим там нужный объект типа техт и записываем в него значения переменной из скрипта. По идее, если мы это сделаем, то должен сработать реактор и далее идет считывание из этого техт-а вернувшегося значения из скрипта, и продолжение програмы на лиспе.

Так вот, кто-нибудь, когда-нибудь такое делал?
Может я зря порю горячку и есть другой способ получения результатов работы сторонних программ? Может есть другой способ приостановить работу лиспа до тех пор, пока не будет выполнена программа на стороне?
Supermax вне форума  
 
Непрочитано 31.01.2008, 13:25
#65
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 31.01.2008, 13:28
#66
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вчера прочел замечательную статью
http://www.nowa.cc/showthread.php?t=65684

Вспомнил молодось, когда прошивал ПЗУ и возился с Ассемблером, правда с тех пор забыл все напрочь. Очень внимательно прочел и понял, что докопаться до функций из DLL можно и без ее регистрации, наличия программ для работы с ней и прочего. И прямо из под лиспа через запуск все того же debug.ехе Да и по памяти шариться и в регистры устройств заглядывать тоже. Если не сойду с ума, обязательно попробую.
Supermax вне форума  
 
Автор темы   Непрочитано 31.01.2008, 13:47
#67
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


#65
Все это мы проходили и обгрызли как яблоко до голого качана (или кочана?). НО! AutoLISP работает только в AutoCAD-e это раз. Те свойства и методы, которые мы получаем при запуске внешнего приложения из под лиспа не дают полного доступа к работе самой программы и как сделать реактор на события в ней, я лично даже не представляю. Очень многие проги имеют свои собственные языки или слегка, но весьма существенно отличающиеся варианты существующих как например сам автокад. Далеко не все программы создают СОМ объекты для работы с ними из других программ.

Как организовать последовательный диалог двух программ? С передачей интерфейса управления пользователю. К примеру:
Рисуем теплотрассу и одновременно отчерчиваем ее в Старте. Тут нарисовал - туда першло все само и там тебя о чем-то спросило. Ты ответил - опять в кад вывалился и тут продолжил работу. Это конечно так, фантазии. Меня сейчас сам принцип интересует. Туда-сюда. Хочу написать программу сразу для двух приложений.
Supermax вне форума  
 
Автор темы   Непрочитано 31.01.2008, 13:59
#68
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Поскольку тут тема про СОМ, то будет полезно дать пару ссылок на статьи про это:
http://www.wasm.ru/publist.php?list=15
Почти все на русском.
Supermax вне форума  
 
Непрочитано 31.01.2008, 15:10
#69
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 31.01.2008, 15:28
#70
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Само добавление объекта ничего не даст, хотя конечно, смотря какого. Мне надо вернуть из сторонней проги результат ее пыхтения в лисп, из которого она запущена. Значит надо создавать объект техт с содержимым в виде значения "пыхтения" той проги. Убиваем двух зайцев одним махом. Вопервых - получаем сигнал, что там все сделано, во вторых получаем данные от туда. Мы от туда можем много раз получать "посылочки" и их обрабатывать вплоть до посылочки с сигналом, что там все закончено. Сейчас спешу, но чуть позже обязательно займусь.
Supermax вне форума  
 
Непрочитано 31.01.2008, 15:37
#71
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Если бы я знал, что такое Старт и его объектную модель, можно было бы поковыряться. Но! Я искренне убежден, что "если данные можно передать/обработать/получить в/из памяти, то там это и надо делать". Вот скажи, какая разница (теоретически) - создавать объект текста или возвращать результат выполнения метода СОМ-объекта в памяти? Все равно пока метод не завершит свою работу, у тебя AutoCAD afaik будет блокирован (я не рассматриваю .NET-dll, создающие немодальные окна; а также arx-приложения, рассчитанные на те же немодальные штучки).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 31.01.2008, 16:59
#72
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вот тут ты батенька даже задержал меня на пути к кулеру за кипяточком.
Я был бы бы не против, если бы прога "со стороны" записывала данные в область памяти мне известную и доступную, но акромя реестра, я таковой не знаю. Метод не всегда дожидается, пока я что-то там сделаю например с окном ввода текста. Он мне немедленно возвращает вла-объект этого окна, а как от туда выковырять текст, что я ввел - не знаю.

Объект WScript вообще можно использовать только из скрипт-файла,
http://www.script-coding.info/WSH/WScript.html
а там есть такие замечательные методы как ConnectObject который устанавливает соединение с объектом автоматизации для обработки его событий.
Вот это реакторы, так реакторы. Соединяя несколько языков в одну кучу, мы получаем очень не слабый инструмент для создания программ для автокада.
Supermax вне форума  
 
Непрочитано 31.01.2008, 18:05
#73
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


А вот сейчас я огребу по полной программе. Во вложении - СОМ-dll, исходники для нее на VB6 и лисп для тестирования под AutoCAD. Перед запуском лиспа dll надо зарегистрировать через regsvr32 (примерно так, как это написано здесь).
Нарисовал второпях, так что за красивость кода не ручаюсь
Вложения
Тип файла: rar com_test.rar (11.4 Кб, 129 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 31.01.2008, 20:04
#74
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну "торопяхи" у тебя тоже ничего. Добавить свойства на заголовок и другие надписи и будет круто.
И от кого ты "отгребешь"? За что грести? Как я понял, публику ничему не научишь. Один на миллион если найдется, так и то в антарктиде.
Supermax вне форума  
 
Автор темы   Непрочитано 31.01.2008, 20:57
#75
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Никак не получается создать безопасный массив в WBScript. Надо передать координаты вставки текста.

Код:
[Выделить все]
Set Network = CreateObject("AutoCAD.Drawing.17")
Set ModelSpace1 = Network.ModelSpace
dim InsPoint, itog
InsPoint = Array(0,0,0)
itog = ModelSpace1.AddText("Получилось",InsPoint,2)
vbNewLine 
Loop
Этот Arrey по моему не тот массив создает?
Supermax вне форума  
 
Автор темы   Непрочитано 31.01.2008, 21:17
#76
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
..... все примитивные типы VBScript представлены как Variant, и, соответственно, все массивы представляются в нем как SAFEARRAY элементов типа Variant. В результате VBScript может принимать массивы с элементами других типов, но не позволяет "добраться" до этих элементов. ....
от сюда:
http://www.suncloud.ru/workshop/wdhp...js/vbsvsjs.htm
Supermax вне форума  
 
Автор темы   Непрочитано 31.01.2008, 21:19
#77
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Мне надо, чтобы был передан VARIANT, а передается по всей видимости SAFEARRAY .
Supermax вне форума  
 
Непрочитано 31.01.2008, 21:24
#78
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Проанализируй мой код лисповой - я же там как раз передаю variant, сделанный из safearray'a
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.02.2008, 01:22
#79
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Цитата:
Сообщение от Supermax Посмотреть сообщение
Никак не получается создать безопасный массив в WBScript. Надо передать координаты вставки текста.

Код:
[Выделить все]
Set Network = CreateObject("AutoCAD.Drawing.17")
Set ModelSpace1 = Network.ModelSpace
dim InsPoint, itog
InsPoint = Array(0,0,0)
itog = ModelSpace1.AddText("Получилось",InsPoint,2)
vbNewLine 
Loop
Этот Arrey по моему не тот массив создает?
Я не знаю VBScript, но в VB это звучало бы примерно так (пишу без студии и без проверок):
Код:
[Выделить все]
Dim objApp As Object, objDoc as Object
Set objApp = GetObject(," AutoCAD.Application")
Set objDoc = objApp.ActiveDocument
Dim InsPoint(2) As Double, objText As Object
InsPoint(0) = 0#: InsPoint(1) = 0#: InsPoint(2) = 0#
objText = objDoc.ModelSpace.AddText("Типа что-то получилось", InsPoint, 2#)
Аналоги можно посмотреть на caduser.ru в разделе VBA.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.02.2008, 12:55
#80
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Попробую, спасибо. Только вот я заболел и выйду в эфир не раньше понедельника.
Supermax вне форума  
 
Автор темы   Непрочитано 07.02.2008, 14:48
#81
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну вот, я уже здоров.
Хочу высказать пару своих мыслей по поводу применения «внешних» по отношению к Автокаду языков. Под понятием «внешние» я подразумеваю те языки, которых Автокад не понимает. Например языки 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. Все это будет видно.

Код:
[Выделить все]
Set WshShell = CreateObject("WScript.Shell")
WshShell.Popup "Начинается открытие AutoCAD-a и создание в нем пошагово выноски ""Привет"" ",, "Запуск AutoCAD-a", 4+16

set Network = CreateObject("AutoCAD.Application.16")
set aktdoc = Network.ActiveDocument
aktdoc.SendCommand "_pline 0,0 100,100  "
MsgBox "далее"
aktdoc.SendCommand "_pline 100,100 300,100  "
aktdoc.SendCommand "(command ""_text"" ""110,110,0"" ""25"" ""0"" ""Привет!"") "
MsgBox "далее"
aktdoc.SendCommand "(setq www ""в переменную www записано это значение"") "
aktdoc.SendCommand "!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"
Вложения
Тип файла: rar fst.rar (601 байт, 119 просмотров)

Последний раз редактировалось Supermax, 07.02.2008 в 16:47.
Supermax вне форума  
 
Автор темы   Непрочитано 07.02.2008, 16:42
#82
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вот тут:
http://subscribe.ru/archive/comp.sof.../18004013.html

Я нашел про AutoCAD.Drawing.16

Цитата:

Создать и получить доступ к документу AutoCAD, не инициализируя сам AutoCAD можно следующим образом:

Листинг 3
procedure CreateAutoCADDocument;
var
AcadDocument: OleVariant;
begin
AcadDocument := CreateOleObject(‘AutoCAD.Drawing.16’);

// Выполнение необходимой задачи

AcadDocument.Save; // Сохранение документа
AcadDocument.Application.Quit; //Завершение работы и выход из AutoCAD
end;
Правда тут на Паскале, но все понятно вполне.

Я не знаю, от куда взяли эту информацию они, но похоже, очень похоже на правду.
Больше поисковик ничего не нашел, увы.
Supermax вне форума  
 
Непрочитано 08.02.2008, 02:13
#83
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Ну ни себе фига ты отдохнул :) Я только с пятого или шестого раза смог все осилить. Ща я тут тоже развернусь в отместку ;) Чур, стоптанными тапками не кидаться! ;)
Цитата:
<...>Когда нужно скакать с одного сценария в другой Фигаро тут – Фигаро там, то все равно надо принять решение с чего начинать?
А на фига, прошу прощения? Теоретически (да и практически тож ;)) можно все (ну или почти все) сделать и внутри одного языка программирования.
Цитата:
Начать с запуска Лиспа не получилось (пока) слабоват я пока в этих информационных потоках.
Ну уж тут-то... Примеров как у дурака фантиков.
Цитата:
Что там течет?, от куда?, куда?, для чего?, как на это повлиять? и чем?
Зависит от кода ;)
Цитата:
<...>Так что, кроме запуска из под Автокада скрипт-файла – ничего совершить не удалось. Установить контакт из-под этого скрипта с текущим окном Автокада не удалось. Указатель упорно не хочет указывать на уже открытый документ и это понятно почему. Если вы запустите второй Автокад и попытаетесь открыть второй раз этот же файл – получите фигу. Разве что только для чтения.
Есть вариант вернуться "к истокам", так сказать. Сначала шел разговор про СОМ-объекты, скрипты и скриптовые языки тут как собаке пятая нога (ИМХО). А если использовать СОМ, то вопрос "вызвать СОМ, передать ему свойства, вызвать методы, взять данные обратно" я уже показывал. Скрипты в данном контексте, скорее всего, нужного эффекта не дадут.
Цитата:
<...>Установить связь из Лиспа с запушенным сценарием скрипта, или хотя бы с СОМ объектами сгенерированными им – тоже не получилось по причине слабого владения СОМ технологией и высокой температуры головы.<...>
Не только. По-моему, скрипты могут получить какие-то данные, но выдать их в лисп с кондачка не получится. Говорю на основе достаточно поверхностного знакомства с этими языками. Возможно, я ошибаюсь.
Цитата:
Стал пытаться пробиться к открытому документу Автокада со стороны скрипта.
СОМ-технология в полный рост, только в обратном направлении. Я-то предлагал и предполагал, что AutoCAD является СОМ-клиентом, а собственные dll / внешние приложения - СОМ-серверами. Ты же сам AutoCAD начинаешь использовать как СОМ-сервер. Нет, она вполне возможна, но смысла в ней я пока особого не вижу.
Цитата:
Во первых, Автокад может быть и выключен вообще. Во вторых, при обращении с неправильными аргументами разных методов (я их тьму перепробовал) открывается в уже включенном Автокаде новый файл или появляется меню выбора «Select template». При правильном наборе аргументов идет запуск нового Автокада и в нем, в Drawing1.dwg происходит осуществление задуманного. Я так понял, что пробраться в работающий кад все же можно, но вот, в текущее окно с документом – вряд ли.
Во-первых, для того, чтобы с AutoCAD'ом работать, его все равно придется либо запустить, либо получить указатель на имеющийся. В VB6, например, это решается примерно так (кстати, без привязки к какой бы то ни было версии AutoCAD'a - используется позднее связывание):
Код:
[Выделить все]
Public objAcad As Object, objDoc As Object

Public Sub GetAcadDoc()
On Error Resume Next
  objAcad = GetObject(, "AutoCAD.Application")
  If Err.Number <> 0 Then
    Err.Clear
    objAcad = CreateObject("AutoCAD.Application")
    If Err.Number <> 0 Then
      MsgBox "Не удалось установить связь с AutoCAD" & _
        vbCrLf & "Возможно, он неверно установлен или " & _
        "не установлен вообще", vbOKOnly + vbCritical + vbApplicationModal, _
        "Ошибка связи с AutoCAD"
      Err.Clear
      Set objAcad = Nothing
    End If
  End If
  objDoc = objAcad.ActiveDocument
End Sub
Цитата:
Запустить Автокад из под скрипта и открыть нужный файл – запросто. И вот тут создается та самая искомая ситуация, когда есть запущенный скрипт, из него установлена связь с Автокадом и открытым в нем документом. Из скрипта можно рисовать в этом документе что хочешь и с клавиатуры и мышью тоже, а также запускать из под Автокада любые макросы на Лиспе вплоть до таких, которые обращаются к тем же СОМ объектам что и скрипт. Из под скрипта можно через ком. строку запускать лисп-выражения, которые создают переменные, тем самым передавать строковые и цифровые данные в макросы работающие на Лиспе. В скрипте есть возможность наблюдать за процессами в запущенном приложении. Я еще не разобрался с ними, но скоро разберусь.
Небольшой комментарий: каша. Последовательность работы (с точки зрения компа) выглядеть будет так: AutoCAD -> открыть документ -> запуск скрипта -> скрипт и работа в нем без AutoCAD'a -> новый AutoCAD -> документ AutoCAD'a (кстати, возможно, уже открытый) -> работа во втором документе -> сохранение изменений (а куда без них) -> закрытие документа -> закрытие второго AutoCAD'a -> уничтожение "мусора" второго AutoCAD'a и его порождений -> продолжение работы в первом AutoCAD. И все это через СОМ-технологию. Плюс запуск команд через SendCommand. А должно быть так: AutoCAD -> открыть документ -> вызов СОМ-сервера -> СОМ-сервер и работа в нем без AutoCAD'a -> возврат данных в вызвавшую процедуру/функцию -> уничтожение СОМ-сервера -> работа в AutoCAD'e.
> #82: Что "не инициализируя сам AutoCAD" - так это наглая ложь. AutoCAD все равно вызывается (можно посмотреть через список процессов). Вдобавок неизвестно, какой профиль и какая версия будет вызвана. А это чревато: в автозагрузке профиля может сидеть неизвестно что, загрузка AutoCAD'a может занимать немеряно времени. Выполнение метода .Save для текущего документа тоже не будет давать 100% гарантированного результата - формат файла заранее неизвестен, неизвестно, сколько там мусора будет ну и тому подобное.
Если честно, я сам иногда грешу подобным подходом (то есть из-под AutoCAD'a вызвать exe, внутри ехе обратиться через СОМ к активному AutoCAD'у и его документу, чего-то сделать и закрыть ехе), но таких ситуаций у меня раз-два и обчелся.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2008, 12:09
#84
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
Небольшой комментарий: каша. Последовательность работы (с точки зрения компа) выглядеть будет так: AutoCAD -> открыть документ -> запуск скрипта -> скрипт и работа в нем без AutoCAD'a -> новый AutoCAD -> документ AutoCAD'a (кстати, возможно, уже открытый) -> работа во втором документе -> сохранение изменений (а куда без них) -> закрытие документа -> закрытие второго AutoCAD'a -> уничтожение "мусора" второго AutoCAD'a и его порождений -> продолжение работы в первом AutoCAD.
Небольшая поправочка. Работа начинается так:
Запуск скрипта -> скрипт и работа в нем без AutoCAD'a ->запуск AutoCAD'a скриптом -> открытие документа AutoCAD'a -> работа в документе -> работа в скрипте -> работа в документе ... -> работа в скрипте - сохранение и закрытие документа -> очистка мусора -> закрытие скрипта. Можно остановить работу скрипта без прекращения работы в AutoCAD-е.

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

Очень интересно узнать, как ты обращаешся к активному каду и открытому в нем документу?
Supermax вне форума  
 
Непрочитано 08.02.2008, 12:21
#85
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Так я же код показал... Я не использую скрипты (в силу элементарного незнания), а для "нормальных" языков и такого подхода более чем достаточно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2008, 12:58
#86
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Супер! Если выкинуть твои попытки открыть новый сеанс через CreateObject и проверки с радостными сообщениями, то код доступа в уже открытый кад на скрипте выглядит так:
Код:
[Выделить все]
set objAcad = GetObject(, "AutoCAD.Application")
set aktdoc = objAcad.ActiveDocument
И вторая строчка тоже уже вторичное действо.

В итоге мы имеем скрипт, который вмешивается в работу AutoCAD-a и в открытом документе рисует что-то свое.

Код:
[Выделить все]
Set WshShell = CreateObject("WScript.Shell")
WshShell.Popup "Начинается вторжение в AutoCAD и создание в нем пошагово выноски ""Привет"" ",, "Вторжение в  AutoCAD", 4+16
set objAcad = GetObject(, "AutoCAD.Application")
set aktdoc = objAcad.ActiveDocument
aktdoc.SendCommand "_pline 0,0 100,100  "
MsgBox "далее"
aktdoc.SendCommand "_pline 100,100 300,100  "
aktdoc.SendCommand "(command ""_text"" ""110,110,0"" ""25"" ""0"" ""Привет!"") "
MsgBox "далее"
aktdoc.SendCommand "(setq www ""в переменную www записано это значение"") "
aktdoc.SendCommand "!www "
Я думаю, что ты без труда все здесь поймешь.

Последний раз редактировалось Supermax, 08.02.2008 в 13:04.
Supermax вне форума  
 
Непрочитано 08.02.2008, 13:23
#87
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Я-то пойму код. Я другого понять не могу - а на фига рисовать через SendCommand?
И вот еще - а если во время выполнения скрипта (до вызова GetObject) AutoCAD грохнулся? Сам или ему помогли - неважно. Что и в каком виде ты получишь - слабо предсказуемо...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2008, 14:18
#88
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да я проверки выкинул не принципиально! Нужны они, нужны. Просто есть ключевые действия, а есть сопутствующие. Этих "сопутствующих" в десятки раз больше и основной код в них тонет просто. Ясен пень, что дав указание открыть надо проверить а открылся ли. У меня самого тысячу раз было что "проскальзывает" четкое и однозначное указание. Даешь указание "открыть", а открытия не происходит.
Я сначала расставляю основные действия и когда цепочка складывается в нужном мне русле, обвешиваю проверками (правда есть грешек, частенько эту процедуру опускаю).

Да не обязательно через SendCommand. Кто сказал, что обязательно. Просто никак у меня пока не клеится с Add... методами да как в VBA можно, так и тут можно.
WBScript, это такой VBA, который запускается простым двойным кликом по файлу с расширением *.vbs даже расширение одной только буквой отличается. Ну есть небольшая разница в синтаксисе, но это мелочи.
Supermax вне форума  
 
Непрочитано 08.02.2008, 15:12
#89
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Ну уж не надо, что .Add так уж сложен... Вот, как пример, добавление точки в пространство модели активного документа:
Код:
[Выделить все]
Set objAcad = GetObject(, "AutoCAD.Application")
Set objDoc = objAcad.ActiveDocument
Set objModel = objDoc.ModelSpace
Dim ptCoord(2) As Double
ptCoord(0) = 0.: ptCoord(1) = 16.: ptCoord(2) = 32.
objPoint = objModel.AddPoint(ptCoord)
Ну или короче:
Код:
[Выделить все]
Set objAcad = GetObject(, "AutoCAD.Application")
Dim ptCoord(2) As Double
ptCoord(0) = 0.: ptCoord(1) = 16.: ptCoord(2) = 32.
objPoint = objAcad.ActiveDocument.ModelSpace.AddPoint(ptCoord)
Ну и все остальное аналогично - см. справку по VBA в AutoCAD.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2008, 15:22
#90
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Некоторые выводы по случаю прозрения:
Запустить из под Автокада скрипт, в котором будет произведена связь с этим же самым открытым Автокадом можно.
Получать данные от туда в текущий документ Автокада можно.
Теперь надо передавать данные туда из Автокада.
Какой бы СОМ объект выбрать для передачи данных? К сожалению я пока не знаю что возвращает SendCommand в ответ на запуск чтения данных из Автокада. Скорее всего nil. Прочесть я могу только свойства объекта а в Автокаде свободных свойств на сколько я знаю нет. Нужно такое, в которое я могу поместить и список и строку и просто числа.
Kpblc, что подскажешь?
Supermax вне форума  
 
Автор темы   Непрочитано 08.02.2008, 15:30
#91
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Код:
[Выделить все]
Set objAcad = GetObject(, "AutoCAD.Application")
Set objDoc = objAcad.ActiveDocument
Set objModel = objDoc.ModelSpace
Dim ptCoord(2) 
ptCoord(0) = 0.
ptCoord(1) = 16.
ptCoord(2) = 32.
objModel.AddPoint ptCoord
Вот так это на скрипте. только аргумент кушать не хочет в последней строке.
Supermax вне форума  
 
Непрочитано 08.02.2008, 15:36
#92
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Видишь ли, что ты, что товарищ вот здесь, как мне кажется, допускаете одну и ту же логическую ошибку. Вы к AutoCAD'у обращаетесь как к СОМ-серверу, когда требуется, чтобы он был клиентом.
Прошу - ну проанализируй посты с 65 по 79 (примерно). Мы пошли по второму (или какому там?) кругу...
---
Добавлено: в скрипте сделай переменную для результата и аргумент заключи в скобки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2008, 16:13
#93
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


В скрипте некоторые аргументы в скобки не ставятся, а некоторые ставятся. Я и так и так пробовал - не выходит.


http://www.script-coding.info/WSH/WshShell.html

тут это видно. По методам полазь и сам увидишь.

Вообще-то я из под скрипта рисовать ничего не намерен, это в моем случае совершенно не нужно. Копировать объекты из одного када в другой - да, обрабатывать на разных машинах содержащиеся в них файлы - да, а рисовать пусть сам кад и рисует. Лучше Автолиспа для этого просто не существует. НО! Что за фигня? Я нарисовать через командную строку могу, а специальные методы, предназначенные для рисования со стороны не получается запустить. Обидно, однако. Вот и мучаюсь.
Supermax вне форума  
 
Непрочитано 09.02.2008, 00:39
#94
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Цитата:
Копировать объекты из одного када в другой - да
Прекрасно делается и в фоновом режиме, через открытие файла с помощью либо vla-open, ThisDrawing.Application.Documents.Open или, например, ObjectDBX (потом применяется метод vla-CopyObjects и вперед).
Цитата:
НО! Что за фигня? Я нарисовать через командную строку могу, а специальные методы, предназначенные для рисования со стороны не получается запустить. Обидно, однако.
Еще раз повторяю - ты идешь не с той стороны. Либо не так. Возьми любую нормальную IDE (например, Visual Studio 2008, или 2005 - Express Edition, рисуешь нормальный exe и в нем ставишь связь со своим AutoCAD'ом - это будет быстрее и проще в результате).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2008, 14:27
#95
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Дело не в осуществлении какой-то конкретной задачи. Я VBScript пока только начал изучать и пробую всякие его правила и особенности. Наткнулся на передачу методам ADD... массива в виде варианта, да еще и saffearray. Вроде все правильно делаю, однако пишет, что аргумент не соответствует требуемому. Ну обойду я эти ADD... и что? Раз обойду, два обойду, так до старости их обходить? Это я свою озоновую дыру в мозге обхожу. Я чегото не так делаю или недопонимаю, а ты мне советуешь отступиться и не связываться.
Supermax вне форума  
 
Автор темы   Непрочитано 12.02.2008, 17:43
#96
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вернусь к данной теме про использование СОМ объектов в Автокаде (да простят меня гуру за русское название).
Не знаю почему, но потянуло меня разнообразить свои навыки в программировании и как задачу я поставил сделать меню к макросу Автокада, написанному на лиспе в виде HTML (не люблю рус\лат нажимать) файла.
HTML файлы изобилуют крутой графикой и возможностью оперировать внешними приложениями. Загрузив такое меню, можно весьма сильно расширить свободу действий в самом Автокаде, ведь запуская лисп-макрос вы тем самым загружаете сам Автокад и во многих случаях не имеете возможность приостановиться и что-нибудь изменить в ходе работы самого Автокада.
А в основном, если без напрягов по выдавливанию новых возможностей - графика. Какая графика!
Первая мысль была такая:
Запускаем из под Автокада обозреватель с отключенными органами управления и задаем ему наш файл HTM.
В процессе нажатия кнопки, созданной на странице файла мы обращаемся к открытому Автокаду и там либо рисуем что-то, либо переменную определяем, прописывая в нее номер нажатой кнопки, либо что еще.
НО!
Попытки напрямую из HTM файла сделать getobject и влезть в открытый Автокад ничем не увенчались.

Тогда я решил запускать из под Автокада скрипт-файл, а уже из него страницу HTM. Скрипт-файл *.vbs очень легко общается с открытым Автокадом (вот когда пригодились объекты СОМ самого Автокада). Рисует там все что хочешь, целые лисп выражения может запускать и прочее. Осталось из под скрипта запустить HTM файл. Если это делать тупо - через вызов эксплорера и загрузкой в него заранее сделанного файла - в эксплорере срабатывают чуть ли не все защитные мероприятия по работе с особоопасными объектами. А если открыть эксплорер с about:blank (это когда вместо адреса к страничке Интернета, хотят работать автономно) и создать страницу из под скрипта - все создается и "сигнализация не срабатывает". Хотя когда запускаешь копию страницы сайта - тоже не срабатывает. Разбираюсь вот.

Надо из окна эксплорера, запущенного из под скрипта получить реакцию на нажатие кнопки или строки, короче событие происходящее в самом окне перенести в скрипт, который это окно вызвал. А уж потом, этот скрипт передаст данные в Автокад, Эксель, Ворд и прочие программы.
Supermax вне форума  
 
Автор темы   Непрочитано 14.02.2008, 12:13
#97
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


На сером форуме нашел описание создания СОМ объекта прямо на VBScript или JScript.

http://forum.script-coding.info/viewtopic.php?id=1037

Сакажу честно, "все гениальное - просто!" не я придумал.

Хороший сайт с тегами (это то, что пишется в <...>)

http://www.htmlbook.ru/html/button.html
Supermax вне форума  
 
Автор темы   Непрочитано 20.02.2008, 20:44
#98
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Случилась беда. не хочет мой regsvr32 регистрировать test.wsc, а заодно и все остальные wsc, которые есть на компе. Пошарился по сети и что-то много случаев сбойной работы этой scrobj.dll
Может кто знает почему? Или попробуйте найти у себя любой файл с расширением wsc, типа того, что в предидущем сообщении и попробуйте его зарегистрировать. Может это что-то с моей машиной?
Миниатюры
Нажмите на изображение для увеличения
Название: ошибка.JPG
Просмотров: 128
Размер:	14.7 Кб
ID:	3597  
Supermax вне форума  
 
Автор темы   Непрочитано 20.02.2008, 21:23
#99
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Есть еще один очень любопытный вопрос. Вот есть СОМ объекты. Обращение к СОМ объекту через функцию (vlax-get-or-create-object ".....") возвращает vla-объект. Такой же как и у других объектов. Если сделать реактор на изменение свойства объекта, (а у многих СОМ объектов они есть) сработает ли этот реактор на изменение свойства у СОМ объекта?
Supermax вне форума  
 
Непрочитано 20.02.2008, 22:47
#100
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


К вопросу о СОМ-объектах из-под браузеров: http://inoe.name/novosti/20592-vojjny-brauzerov.html
Цитата:
только в браузере от Microsoft применяются программные компоненты ActiveX, позволяющие запускать из браузера приложения без ведома пользователя. Проблема в том, что у плагианов ActiveX слишком много прав – если хакер отыщет в них лазейку, то ему не составит особого труда проникнуть в операционную систему. Риск высок: согласно двенадцатому отчёту Symantec “Internet Security Report”, 89% пробелов безопасности в браузерных плагинов сводятся к слабым местам в компонентах ActiveX.
Единственным выходом остаётся отключить ActiveX, однако по умолчанию Microsoft этого не делает. Только пользователи Vista находятся в несколько более выгодном положении: новая Windows открывает IE7 в защищённом режиме, который не позволяет запускать программы из браузера. Впрочем, это не значит, что в Vista, можно чувствовать себя совершенно спокойно: из 20 недочетов на данный момент обнаруженных в IE7, Microsoft исправило только 12 – при этом один из оставшихся восьми Secunia расценивает как весьма критичный.
Так что я б капитально задумался на предмет целесообразности продолжения подобных поисков и начал бы искать другие методы.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.02.2008, 11:18
#101
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да, е-мае! НЕ ЗАПУСКАЮ Я ПРИЛОЖЕНИЯ ИЗ ПОД БРАУЗЕРА! Я браузер запускаю из под Автокада. Да и то не сам браузер, а скрипт-сценарий. А скрипт ловит события на странице и только! Никаких активных элементов в странице нет. Запускается только она, конкретная и никаких перемещений влево вправо. Страница твоя собственная. Ты сам ее сделал и только ты можешь в ней хакерствовать!
Какая к черту разница между скачиваемыми с сети прогамм, которые ты ни капли не задумываясь ставишь на свой комп, а они уж точно могут все нутро твоего компа перевернуть, в отличии от макроса работающего со страницей htp или htm?

Последний раз редактировалось Supermax, 21.02.2008 в 12:16.
Supermax вне форума  
 
Непрочитано 21.02.2008, 11:28
#102
Кулик Алексей aka kpblc
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 в разных сочетаниях, настройки - как для "запуганных", то есть по максимуму) именно так и распозналось. И моментально блокировалось.
Цитата:
Какая к черту разница между скачиваемыми с сети прогами, которые ты ни капли не задумываясь ставишь на свой комп, а они уж точно могут все нутро твоего компа перевернуть, в отличии от макроса работающего со страницей htp или htm?
Разница в том, что софт ставится а потом запускается, а скрипт ты сразу на запуск ставишь. А так-то действительно, никакой разницы нет. Просто блокировать установленный софт иногда сложнее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.02.2008, 12:14
#103
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ты хочешь сказать, что страничек на своем компе скоро будет не видно? Вряд ли. Как закачивались, так и будут закачиваться. Ты хочешь сказать, что СОМ технологию прикроют? Так вообще все станет. Может язык сценариев отменят, или запретят программам анализировать события, запускать собственные приложения, вообще обращаться к существующим СОМ объектам?
Давай заменим эксплорер на оперу и дело с концом.
Supermax вне форума  
 
Непрочитано 21.02.2008, 12:45
#104
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.02.2008, 12:56
#105
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да мне фиолетово вообще КАК делать. Мне надо сделать макрос, работающий со страничкой Интернета. Да хоть через одно место, лишь бы сделать первый шаг. Потом можно анализировать и менять рельсы. А пока хоть как-нибудь.
Я хочу прямо из лиспа события смотреть НА СОБСТВЕННОМ КОМПЕ между прочим.
Supermax вне форума  
 
Автор темы   Непрочитано 23.02.2008, 18:17
#106
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Пытался сделать реактор на изменение свойств СОМ объекта - ничего не получилось. Хоть и vla-объект, но не Аавтокада. Не принимает его, ругается.
Сие маленькое огорчение говорит, что без внешних примочек и обращения к Автокаду через getobject для передачи инфы о проишедших событиях ничего не получится.
Все любители "чистого" лиспа могут сушить весла.
Supermax вне форума  
 
Автор темы   Непрочитано 26.02.2008, 17:16
#107
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Оказывается, чтобы выполнить в Автолиспе функцию или целую программу, написанную на vbscript или jscript не обязательно создавать файл и его потом запускать. Функции прекрасно загружаются по отдельности и простенько так выполняются.
Спасибо Серому кардиналу с серого форума.
Код:
[Выделить все]
(setq svr (vlax-get-or-create-object "MSScriptControl.ScriptControl"))
(vlax-put-property svr "Language" "vbscript")
(vlax-invoke-method svr "AddCode" "Function test3 () msgbox \"Привет!\" End Function")
(vlax-invoke-method svr "AddCode" "Function test2 () msgbox \"Второе сообщение!\" End Function")
(vlax-invoke-method svr "eval" "test3")
(vlax-invoke-method svr "eval" "test2")
Две функции test3 и test2 какую хотите, такую и запускайте, а они еще и возвращать значения могут.

Теперь проблема компиляции лиспа с vbscript-ом отпала.
Supermax вне форума  
 
Автор темы   Непрочитано 27.02.2008, 19:24
#108
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Полезную вещ нашел.

Код:
[Выделить все]
(setq svr (vlax-get-or-create-object "MSScriptControl.ScriptControl"))
(vlax-put-property svr "Language" "vbscript")
(setq rezult (vlax-invoke-method svr "eval" "1+2+3*(4+5)"))
Возвращает вычисленное значение.
Часто надо посчитать формулу по человечески, например введенную пользователем. Вот очень простое решение.
Supermax вне форума  
 
Автор темы   Непрочитано 06.03.2008, 17:46
#109
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Бился я бился, то на "сером форуме", то в "мы дома" и благодаря помощи супер специалиста в области скриптовых языков 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
Код:
[Выделить все]
regsvr32 C:\Windows\system32\WshScript.wsc
Все коды открытые и читаются блокнотиком.

Потом пишем программу, которая представляет из себя квинтэссенцию двух языков, AutoLisp'a и VBScript.

Ее написал WISGEST практически на ходу изучив Автолисп

Код:
[Выделить все]
(vl-load-com)

(setq ScriptControl (vlax-get-or-create-object "MSScriptControl.ScriptControl"))
(vlax-put-property ScriptControl "Language" "VBScript")
(vlax-invoke-method ScriptControl "AddCode" "
  Set AutoCAD = GetObject(, \"AutoCAD.Application\")
  Set ActiveDocument = AutoCAD.ActiveDocument
")

(setq WshScript (vlax-get-or-create-object "WshScript"))
(setq WScript (vlax-variant-value (vlax-get-property WshScript "WScript")))

(defun lispIE_OnQuit () (alert "Гуд бай!"))
(vlax-invoke-method ScriptControl "AddCode" "
  Sub vbsIE_OnQuit()
    ActiveDocument.SendCommand \"(lispIE_OnQuit) \"
  End Sub
")
(vlax-invoke-method WshScript "Add" "IE_OnQuit"
  (vlax-invoke-method ScriptControl "Eval" "GetRef(\"vbsIE_OnQuit\")"))

(setq IE (vlax-invoke-method WScript
  "CreateObject" "InternetExplorer.Application" "IE_"))
(vlax-put-property IE "Visible" 1)
Ну и я ему чуток помог

Тут вызывается браузер и при выходе из него срабатывает функция lispIE_OnQuit, выдающая сообщение "Гуд бай!"
Все это можно теперь скомпелировать и работать с браузером InternetExplorer.Application как с панелью кнопок.
Supermax вне форума  
 
Автор темы   Непрочитано 14.07.2008, 20:26
#110
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Готов первый в мире вебмакрос к Автокаду!

Всем сюда:

http://forum.dwg.ru/showpost.php?p=266764&postcount=13
посты №13 и 14.

Последний раз редактировалось Supermax, 11.11.2008 в 12:08.
Supermax вне форума  
 
Автор темы   Непрочитано 27.11.2008, 22:00 "MSScriptControl.ScriptControl"
#111
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Наконец-то раздобыл хелп-файл по этому объекту.
Надо его перелопатить для AutoLISP-a.
Практически все методы ясны, кроме метода Run.
Вложения
Тип файла: rar msscript.rar (40.8 Кб, 154 просмотров)
Supermax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Объекты СОМ в AutoCAD

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из 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