Тема: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

Ну, собственно, вопрос.
В реестре по адресу HKEY_CLASSES_ROOT\.dwg (или по адресу HKEY_CURRENT_USER\Software\Classes\.dwg) только строковое значение
AutoCAD.Drawing.16
Но это может быть и 2005 и 2006 автокад.
А значению AutoCAD.Drawing.17 может соответствовать как 2007, так и 2008. Можно ли как-то однозначно определить, какая именно версия на данный момент асоциирована с фалами DWG?

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

А в HKEY_CURRENT_USER\Software\Autodesk\AutoCAD в ключе CurVer не глядел?

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

Спасибо, самое то.

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

С файлами .DWG совсем не обязательно ассоциируется именно AutoCAD.
В HKEY_CURRENT_USER\Software\Autodesk\AutoCAD в ключе CurVer также не обязательно записан нужный AutoCAD - там просто последний запускавшийся.
Так что определение не однозначно. В любой момент всё может измениться (на другой машине, у другого пользователя).
"Однозначность" зависит от целей. Например, можно определять какая именно строка из "AutoCAD.Application", "AutoCAD.Application.17.0", "AutoCAD.Application.17.1" должна использоваться. С учётом, например, что "AutoCAD.Application.17.1" может относиться и к русскому и к английскому варианту.

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

По-видимомоу, нужно считать, что с файлом DWG "ассоциирован" только формат файла, который может относиться к разным версиям AutoCAD. Это формат можно "однозначно" определить по первым шести байтам файла открытого в текстовом редакторе. Вот что говорит по этому поводу Autodesk:

To determine the version of a DWG or DXF file, open the file in a text editor.
The first six bytes of a DWG file identify its version. In a DXF file, the AutoCAD version number is specified in the header section. The DXF system variable is $ACADVER.
Find the version identifier in the following table to determine the release of AutoCAD.
Version identifier
 AutoCAD release
AC1018
 2004, 2005, 2006
AC1015
 2002, 2000i, 2000
AC1014
 14
AC1012
 13
AC1009
 12, 11
AC1006
 10
AC1004
 9
AC1002
 2

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

Формат DWG совсем не обязательно ассоциируется именно с AutoCAD - это может быть, например, и вьювер.
Версия, в которой сохранен DWG-файл (дескриптор) также не служит признаком версии AutoCAD, и даже вообще из "самого" ли Автокада файл сохранен. Другие программы тоже DWG пишут.
Для VBA, выполняющегося внутри AutoCAD узнавать версию нет смысла - он работает внутри того приложения, в которое встроен. А вот для внешних программ, написанных на чем угодно, и обращающихся к Автокаду "снаружи", это имеет большое значение. Например, для запуска Автокада и "чего-то-в-нем-деланья" через COM-технологии нужна строка наподобие "AutoCAD.Application.17.1". Можно запустить Автокад и просто как EXE-файл, а потом уже обращаться к нему как к COM-серверу.
Для однозначной идентификации Автокада надо:
1. На каком-то этапе(можно при инсталляции) определить "правильный" acad.exe (или список допустимых)
2. Реестр исследовать  в ветках
HKEY_CLASSES_ROOT\AutoCAD.Application.XX\CLSID
где XX - типа  17.0, 17.1
Здесь получить наподобие
AcadCLSID :="{6AB55F46-2523-4701-A912-B226F46252BA}"
3. Потом найти
"HKEY_CLASSES_ROOT\CLSID\"+ AcadCLSID + "\LocalServer32", там прочитать имя EXE-файла. Если это то, что надо, то
4. Прочитать
"HKEY_CLASSES_ROOT\CLSID\"+ AcadCLSID + "\ProgID" и здесь получить "истинную" строку для коннекта.

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

Формат DWG совсем не обязательно ассоциируется именно с AutoCAD — это может быть, например, и вьювер.

Ну это общий случай и я его даже как-то не учитывал, задавая вопрос. Хотя такое тоже возможно.
У меня из внешней программы запускается автокад строкой

Set ACADApp = CreateObject("AutoCAD.Application")

И в статус-строке просто сообщаю пользователю, какая именно версия запускается (из ключа CurVer). Ключ считывается каждый раз при запуске программы, поэтому изменение версии с одной на другую не важно.
А вот кстати еще вопрос в тему: как связаны названия автокадов и номера версий?
R16.0 - AutoCad2004
R16.1 - Autocad2005
А вот с R17.0 и 17.1 мне не очень понятно. Это соответственно 2007 и 2008?
Просто у меня стоит основным 2007, а в CurVer стоит 17.1.
Или 17.0 это AutoCad2006?

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

Извиняюсь, нашел.
R16.0 — AutoCad2004
R16.1 — Autocad2005
R16.2 — Autocad2006
R17.0 — Autocad2007
R17.1 — Autocad2008
Вот только не очень понятным остается, почему у меня при "CurVer"=17.1 запускается 2007 автокад.

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

> Loner Wanderer
Ты проверяешь до запуска или после?

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

> Александр Ривилис
У меня ощущение, что значение записывается в момент закрытия сессии AutoCAD'a.

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

Проверка идет до запуска.

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

Loner Wanderer пишет:

Проверка идет до запуска.

Не правильно. Так делать нельзя. В этом случае ты получаешь версию AutoCAD, который был запущен в предыдущий раз.

> Кулик Алексей aka kpblc
Ощущение неправильное. AutoCAD при запуске прописывает это значение.

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

> Александр Ривилис
Значение CurVer записывается в реестр при открытии автокада. Соответственно, я проверяю при запуске моей программы ключ и пишу, что загружается соответствующая версия. Ошибка возможна только в том случае, если запустить другую версию автокада в промежуток между считыванием ключа реестра и запуска копии автокада из моей программы. Но этот промежуток = 1-2 секунды и чтобы такое случилось это надо сильно постараться.
Кстати - переустановил автокад и теперь все верно - версия R17.0 соответствует 2007.

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

> Loner Wanderer
Я вроде именно об этом и писал.

Re: Как однозначно определить, какая версия автокада ассоциирована с файлами DWG?

> Александр Ривилис
Значит я просто того сообщения не понял.