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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > CreateObject

CreateObject

Ответ
Поиск в этой теме
Непрочитано 02.05.2006, 15:09 #1
CreateObject
Serj
 
Регистрация: 16.12.2004
Сообщений: 14

Описываю ситуацию...
На компе 3 AutoCAD-а: ACAD2004Rus, ACAD2004En, ACAD2006Rus
Необходимо:
Программно запускать выбранный пользователем AutoCAD...

Перешерстил весь реестр, никак не могу найти ключей, которые отвечают за то, какой AutoCAD запускать при вызове CreateObject, вернее нашел (HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\CurVer=R16.0 например), но при изменении этого параметра "ручками" и выполнении CreateObject("AutoCAD.Application") все равно запускается не тот AutoCAD, который был выбран...
Вопросс: Если кто понял, что я имел ввиду объясните, ГДЕ еще располагаются ключи, отвечающие за текущую (последнюю запущенную) версию AutoCAD??? Или может что еще...
Просмотров: 5239
 
Непрочитано 02.05.2006, 15:37
#2
Zouss


 
Регистрация: 14.03.2006
Сообщений: 863


дефолтом запускается как раз последняя запущенная версия

а организовать выборочный запуск нужной версии (со всем комплектом навески и обвязки) можно через профили,
например в ярлыке прописываешь "c:\Program Files\AutoCAD 2005\acad.exe"/p user12
где /p - ключ для запуска профиля
user12 - полный путь к *.arg файлу профиля
Zouss вне форума  
 
Автор темы   Непрочитано 02.05.2006, 15:45
#3
Serj


 
Регистрация: 16.12.2004
Сообщений: 14
<phrase 1=


Цитата:
Сообщение от Zouss
"c:\Program Files\AutoCAD 2005\acad.exe"/p user12
где /p - ключ для запуска профиля
user12 - полный путь к *.arg файлу профиля
Это все я знаю А вот как осуществить запуск разных версий? 2004 и 2006 например? Программно?
Serj вне форума  
 
Непрочитано 02.05.2006, 19:58
#4
C1


 
Регистрация: 13.06.2005
Сообщений: 314


См. в реестре в HKEY_CLASSES_ROOT. В CreateObject через точку поставить номер версии.
[ATTACH]1146585527.JPG[/ATTACH]
C1 вне форума  
 
Непрочитано 03.05.2006, 07:20
#5
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Serj
Цитата:
Сообщение от Zouss
"c:\Program Files\AutoCAD 2005\acad.exe"/p user12
где /p - ключ для запуска профиля
user12 - полный путь к *.arg файлу профиля
Это все я знаю А вот как осуществить запуск разных версий? 2004 и 2006 например? Программно?
Вопрос подробно рассмотрен в книге "САПР на базе AutoCAD - как это делается".

Первоначальный запуск одного из выбираемых AutoCAD надо делать в виде обычного процесса (из своей программы). При этом программно надо выяснить, с каким именем этот AutoCAD будет числиться (AutoCAD.Application, AutoCAD.Application.16.1 и т.п.). В дальнейшем к нему можно уже обращаться как к COM-серверу.

Разные версии AutoCAD жульничают с записями в реестре. Вполне может оказаться, что ссылка на CLSID может оказаться неправильной. Одновременный запуск AutoCAD разных версий возможен только как процессов. Обращение к ним через COM весьма затруднительно. Попеременный запуск возможен.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 03.05.2006, 08:55
#6
Serj


 
Регистрация: 16.12.2004
Сообщений: 14
<phrase 1=


Цитата:
Сообщение от C1
См. в реестре в HKEY_CLASSES_ROOT. В CreateObject через точку поставить номер версии.
[ATTACH]1146585527.JPG[/ATTACH]
дело в том, что, например, при выполнении
CreateObject("AutoCAD.Application") может запускаться абсолютно любой AutoCAD (16.0, 16.1, 16.2)
При выполнении
CreateObject("AutoCAD.Application.16.0") вообще вываливается ошибка...
При выполнении CreateObject("AutoCAD.Application.16.2") нормально запускается 2006 ACAD.
Так вот, разделить программный запуск 2005 и 2006 ACAD еще возможно, а вот например 2004 и 2006 уже не выходит. А про разные локализации уже даже думать страшно (2004 есть и русский и английский)...
Serj вне форума  
 
Автор темы   Непрочитано 03.05.2006, 09:01
#7
Serj


 
Регистрация: 16.12.2004
Сообщений: 14
<phrase 1=


Цитата:
Сообщение от ShaggyDoc
Цитата:
Сообщение от Serj
Цитата:
Сообщение от Zouss
"c:\Program Files\AutoCAD 2005\acad.exe"/p user12
где /p - ключ для запуска профиля
user12 - полный путь к *.arg файлу профиля
Это все я знаю А вот как осуществить запуск разных версий? 2004 и 2006 например? Программно?
Вопрос подробно рассмотрен в книге "САПР на базе AutoCAD - как это делается".

Первоначальный запуск одного из выбираемых AutoCAD надо делать в виде обычного процесса (из своей программы). При этом программно надо выяснить, с каким именем этот AutoCAD будет числиться (AutoCAD.Application, AutoCAD.Application.16.1 и т.п.). В дальнейшем к нему можно уже обращаться как к COM-серверу.

Разные версии AutoCAD жульничают с записями в реестре. Вполне может оказаться, что ссылка на CLSID может оказаться неправильной. Одновременный запуск AutoCAD разных версий возможен только как процессов. Обращение к ним через COM весьма затруднительно. Попеременный запуск возможен.
Я наверное глупый и не понял некоторых вещей...
Например:
Цитата:
Первоначальный запуск одного из выбираемых AutoCAD надо делать в виде обычного процесса (из своей программы). При этом программно надо выяснить, с каким именем этот AutoCAD будет числиться (AutoCAD.Application, AutoCAD.Application.16.1 и т.п.). В дальнейшем к нему можно уже обращаться как к COM-серверу.
Что означает первоначальный запуск? И каков смыслотлавливать имена процессов AutoCAD?

Цитата:
Одновременный запуск AutoCAD разных версий возможен только как процессов. Обращение к ним через COM весьма затруднительно. Попеременный запуск возможен.
Дело в том, что одновременный запуск разных версий мне не требуется, а вот если возможен попеременный запуск (конкретных версий), то не могли бы вы поделиться, как это делается?
Serj вне форума  
 
Непрочитано 03.05.2006, 09:28
#8
C1


 
Регистрация: 13.06.2005
Сообщений: 314


Цитата:
Сообщение от Serj
CreateObject("AutoCAD.Application.16.0") вообще вываливается ошибка...
Нужно CreateObject("AutoCAD.Application.16"), а не CreateObject("AutoCAD.Application.16.0") - как в HKEY_CLASSES_ROOT.
C1 вне форума  
 
Автор темы   Непрочитано 03.05.2006, 09:32
#9
Serj


 
Регистрация: 16.12.2004
Сообщений: 14
<phrase 1=


Цитата:
Сообщение от C1
Цитата:
Сообщение от Serj
CreateObject("AutoCAD.Application.16.0") вообще вываливается ошибка...
Нужно CreateObject("AutoCAD.Application.16"), а не CreateObject("AutoCAD.Application.16.0") - как в HKEY_CLASSES_ROOT.
Извиняюсь, сам ошибся
CreateObject("AutoCAD.Application") так же как и CreateObject("AutoCAD.Application.16") могут запускать любой AutoCAD... и 2004 и 2005 и 2006
Serj вне форума  
 
Непрочитано 03.05.2006, 19:34
#10
C1


 
Регистрация: 13.06.2005
Сообщений: 314


Цитата:
Сообщение от Serj
CreateObject ("AutoCAD.Application.16") могут запускать любой AutoCAD... и 2004 и 2005 и 2006
Попробуйте сначала запустить AutoCAD с помощью функции Shell. Путь можно взять из ветви HKEY_CLASSES_ROOT\AutoCAD.Drawing.16\protocol\StdFileEditing\server (для соответствующей версии). А потом получить к нему доступ через Set acadApp = GetObject(, "AutoCAD.Application")
C1 вне форума  
 
Автор темы   Непрочитано 04.05.2006, 09:17
#11
Serj


 
Регистрация: 16.12.2004
Сообщений: 14
<phrase 1=


Цитата:
Сообщение от C1
Цитата:
Сообщение от Serj
CreateObject ("AutoCAD.Application.16") могут запускать любой AutoCAD... и 2004 и 2005 и 2006
Попробуйте сначала запустить AutoCAD с помощью функции Shell. Путь можно взять из ветви HKEY_CLASSES_ROOT\AutoCAD.Drawing.16\protocol\StdFileEditing\server (для соответствующей версии). А потом получить к нему доступ через Set acadApp = GetObject(, "AutoCAD.Application")
Тоесть другого метода быть не может?
Я почемуто думал, что проблему можно решить исправлением ключей реестра... Через Shell запускать, через GetObject получать, имхо кривой метод... Но впринципе за неимением лучшего ...
Serj вне форума  
 
Непрочитано 04.05.2006, 13:42
#12
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Serj
Я почемуто думал, что проблему можно решить исправлением ключей реестра... Через Shell запускать, через GetObject получать, имхо кривой метод... Но впринципе за неимением лучшего ...
Кривой метод как раз будет через правку реестра - достаточно трудоемко (нужно править достаточно много мест), да и испортить реестр - раз плюнуть.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 04.05.2006, 13:48
#13
Serj


 
Регистрация: 16.12.2004
Сообщений: 14
<phrase 1=


Цитата:
Сообщение от Александр Ривилис
Цитата:
Сообщение от Serj
Я почемуто думал, что проблему можно решить исправлением ключей реестра... Через Shell запускать, через GetObject получать, имхо кривой метод... Но впринципе за неимением лучшего ...
Кривой метод как раз будет через правку реестра - достаточно трудоемко (нужно править достаточно много мест), да и испортить реестр - раз плюнуть.
Тоесть вы считаете, что через Shell и GetObject(позднее связывание, при котором не факт, что будет получен правильный объект) делать правильнее, чем через CreateObject?
Serj вне форума  
 
Непрочитано 04.05.2006, 14:05
#14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Serj
Тоесть вы считаете, что через Shell и GetObject(позднее связывание, при котором не факт, что будет получен правильный объект) делать правильнее, чем через CreateObject?
Я считаю, что править реестр для запуска нужного AutoCAD не стоит. Если запущен "правильный" AutoCAD и он был запущен единственным (а это IMHO можно проверить вызвав GetObject до Shell), то он и будет получен. Если какие-то AutoCAD'ы уже были запущены, то можно предложить пользователю их завершить (можно и без участия пользователя), а потом старовать нужный. Все это IMHO, т.к. я не использую VB/VBA и недолюбливаю ActiveX.
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > CreateObject