Как выполнить запуск приложения AutoCAD?

Автор Тема: Как выполнить запуск приложения AutoCAD?  (Прочитано 10241 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Добрый вечер, подскажите пожалуйста, в какую сторону "копать", чтобы решить задачу:
1) На компьютере установлены: AutoCAD 2014, Plant 3D 2014 и Civil 3D 2014.
2) Имеются три чертежа, созданные в соответствующих приложениях.

Цель: открывать каждый чертеж в том приложении, в котором он был создан. Данная необходимость связана с тем, что в каждом чертеже имеются настройки, которые отличны для каждого чертежа. То есть, чертеж, созданный в Plant 3D не стоит открывать в Civil 3D, потому что при открытии файла может выскочить какое-нибудь окно, предупреждающее, что в данном чертеже нет определенного шрифта или что-то другое (тому подобное).

Заранее благодарен!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Эммм... Это вопрос относится к программированию?
Правой кнопкой мышки на файл - "Открыть с помощью"

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Эммм... Это вопрос относится к программированию?
Правой кнопкой мышки на файл - "Открыть с помощью"

Ха-ха ) Смешно! Нет я тут балуюсь понимаете ли )

Что-то типа CreateObject необходимо выполнить )

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Я и не смеюсь
Если вопрос по программированию, значит вы хотите открыть чертеж из своей функции, которая, логично, УЖЕ загружена в автокад. Соответственно - УЖЕ ОТКРЫТО какое-то из перечисленных приложений!
Из чего вытекает - вопрос сформулирован некорректно. Что вы хотите - не ясно

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
В любом случае - на сколько мне известно в файле dwg не хранится информации о конкретном вертикальном решении (будь то civil, map и пр). Только версия - откройте dwg-файл обычным блокнотом и увидите прям самую первую строку. Например AC1027 - это будет соответствовать версии 2013 (табличка соответствия есть тут https://ru.wikipedia.org/wiki/DWG)

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Ладно, попробую снова:
1) Имеются три приложения в системе: AutoCAD 2014, Plant 3D 2014 и Civil 3D 2014.
2) Имеются три чертежа, один из них создан в Plant 3D, другой в Civil 3D, а последний в AutoCAD.
3) Требуется программно (в виде отдельного приложения) запускать приложения Plant 3D и открыть в нем только тот чертеж, который был создан в нем. Второй чертеж (Civil 3D) открыть в том приложении, в котором он был создан. Третий чертеж (AutoCAD) в AutoCAD-е.
4) Выполнить все три операции в фоне. На самом деле меня это меньше интересует (с этим как-нибудь управлюсь).

Как-то так...

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
на сколько мне известно в файле dwg не хранится информации о конкретном вертикальном решении

На самом деле хранится. Мы это даже уже обсуждали: http://adn-cis.org/forum/index.php?topic=2972.msg11298#msg11298

Можно еще здесь посмотреть это: http://adndevblog.typepad.com/autocad/2013/08/registry-values-for-productid-and-localeid-for-autocad.html




Запускать приложение из конкретной папки и потом отлавливать запущенный процесс - не самое лучшее решение...
Похоже другого выбора у меня нет!

Если вдруг у кого-то будет более простое решение, пишите:
Код - vb.net [Выбрать]
  1.         Dim Shll As Object = CreateObject("WScript.Shell")
  2.         Dim RunPlant3D As String = Chr(34) & "C:\Program Files\Autodesk\AutoCAD 2014\acad.exe" & Chr(34) & _
  3.             " " & "/product" & Chr(34) & "PLNT3D" & Chr(34) & " " & "/language" & " " & Chr(34) & "ru-RU" & Chr(34)
  4.  
  5.         Shll.Run(RunPlant3D , , True)
  6.  
  7.  
  8.         Dim RunCivil3D As String = Chr(34) & "C:\Program Files\Autodesk\Autodesk AutoCAD Civil 3D 2014\acad.exe" & Chr(34) & _
  9.             " " & "/ld" & " " & Chr(34) & "C:\Program Files\Autodesk\Autodesk AutoCAD Civil 3D 2014\AecBase.dbx" & Chr(34) & _
  10.             " " & "/p" & " " & Chr(34) & "<<C3D_Russia>>" & Chr(34)
  11.  
  12.         Shll.Run(RunCivil3D , , True)

Допишу решение завтра!
« Последнее редактирование: 28-12-2015, 15:47:36 от Пашин Евгений »

Отмечено как Решение Пашин Евгений 30-12-2015, 14:07:00

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Решение:
1. Определить все установленные версии (вертикальные решения) AutoCAD-а в системе:

Код - vb.net [Выбрать]
  1.         Dim AppVer As New List(Of String)
  2.         AppVer.Add("1") ' AutoCAD 2002
  3.         AppVer.Add("2") ' AutoCAD 2004
  4.         AppVer.Add("3") ' AutoCAD 2005
  5.         AppVer.Add("4") ' AutoCAD 2006
  6.         AppVer.Add("5") ' AutoCAD 2007
  7.         AppVer.Add("6") ' AutoCAD 2008
  8.         AppVer.Add("7") ' AutoCAD 2009
  9.         AppVer.Add("8") ' AutoCAD 2010
  10.         AppVer.Add("9") ' AutoCAD 2011
  11.         AppVer.Add("A") ' AutoCAD 2012
  12.         AppVer.Add("B") ' AutoCAD 2013
  13.         AppVer.Add("D") ' AutoCAD 2014
  14.         AppVer.Add("E") ' AutoCAD 2015
  15.         AppVer.Add("F") ' AutoCAD 2016
  16.  
  17.         Dim AppName As New List(Of String)
  18.         AppName.Add("000") ' Autodesk Civil 3D (C3D)
  19.         AppName.Add("001") ' AutoCAD (ACAD)
  20.         AppName.Add("002") ' AutoCAD OEM
  21.         AppName.Add("003") ' Inventor Series (AIS)
  22.         AppName.Add("004") ' AutoCAD Architecture (ACA)
  23.         AppName.Add("005") ' AutoCAD Mechanical (ACADM)
  24.         AppName.Add("006") ' Building System
  25.         AppName.Add("007") ' AutoCAD Electrical (ACADE)
  26.         AppName.Add("008") ' Land Desktop
  27.         AppName.Add("009") ' AutoCAD LT
  28.         AppName.Add("00A") ' AutoCAD OEM
  29.         AppName.Add("012") ' ADT for Raster Design
  30.         AppName.Add("013") ' Inventor Professional (AIP)
  31.         AppName.Add("014") ' Inventor Professional for Routed Systems (AIPRS)
  32.         AppName.Add("015") ' Inventor Professional for Simulation (AIPSIM)
  33.         AppName.Add("016") ' AutoCAD P & ID-2D (PNID)
  34.         AppName.Add("017") ' AutoCAD Plant 3D (PLNT3D)
  35.         AppName.Add("018") ' Civil 3D Land Desktop Companion
  36.         AppName.Add("022") ' Autodesk Utility Design
  37.         AppName.Add("023") ' Autodesk Topobase Client
  38.         AppName.Add("024") ' Autodesk Civil
  39.         AppName.Add("028") ' DWG TrueView
  40.         AppName.Add("029") ' AutoCAD escad
  41.         AppName.Add("030") ' AutoCAD Structural Detailing
  42.  
  43.         Dim AppLang As New List(Of String)
  44.         AppLang.Add("404")
  45.         AppLang.Add("405")
  46.         AppLang.Add("407")
  47.         AppLang.Add("409")
  48.         AppLang.Add("410")
  49.         AppLang.Add("411")
  50.         AppLang.Add("412")
  51.         AppLang.Add("415")
  52.         AppLang.Add("416")
  53.         AppLang.Add("419")
  54.         AppLang.Add("040C")
  55.         AppLang.Add("040A")
  56.         AppLang.Add("040E")
  57.         AppLang.Add("804")
  58.  
  59.         For Each aVer As String In AppVer
  60.             For Each aName As String In AppName
  61.                 For Each aLang As String In AppLang
  62.                     Dim aAssociation As String = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\acad." & aVer & aName & "." & aLang & "\shell\open\command", "", Nothing) '  возвращает, например "C:\Program Files\Autodesk\AutoCAD 2014\acad.exe"
  63.                     If aAssociation <> "" Then
  64.                         MsgBox("На вашем компьютере установлен: " & Get_Full_App(aVer, aName, aLang))
  65.                     End If
  66.                 Next
  67.             Next
  68.         Next

2. Функция, возвращающая полное имя приложения:

Код - vb.net [Выбрать]
  1.     Public Function Get_Full_App(ByVal AppVer As String, ByVal AppName As String, ByVal AppLang As String) As String
  2.         Get_Full_App = ""
  3.  
  4.         Select Case AppName
  5.             Case "000"
  6.                 Get_Full_App += "Autodesk Civil 3D"
  7.             Case "001"
  8.                 Get_Full_App += "AutoCAD"
  9.             Case "00A"
  10.                 Get_Full_App += "AutoCAD OEM"
  11.             Case "002"
  12.                 Get_Full_App += "MAP"
  13.             Case "003"
  14.                 Get_Full_App += "Inventor Series (AIS)"
  15.             Case "004"
  16.                 Get_Full_App += "AutoCAD Architecture"
  17.             Case "005"
  18.                 Get_Full_App += "AutoCAD Mechanical (ACADM)"
  19.             Case "006"
  20.                 Get_Full_App += "Building System"
  21.             Case "007"
  22.                 Get_Full_App += "AutoCAD Electrical (ACADE)"
  23.             Case "008"
  24.                 Get_Full_App += "Land Desktop"
  25.             Case "009"
  26.                 Get_Full_App += "AutoCAD LT"
  27.             Case "012"
  28.                 Get_Full_App += "ADT for Raster Design"
  29.             Case "013"
  30.                 Get_Full_App += "Inventor Professional (AIP)"
  31.             Case "014"
  32.                 Get_Full_App += "Inventor Professional for Routed Systems (AIPRS)"
  33.             Case "015"
  34.                 Get_Full_App += "Inventor Professional for Simulation (AIPSIM)"
  35.             Case "016"
  36.                 Get_Full_App += "AutoCAD P & ID - 2D"
  37.             Case "017"
  38.                 Get_Full_App += "AutoCAD Plant 3D"
  39.             Case "018"
  40.                 Get_Full_App += "Civil 3D Land Desktop Companion"
  41.             Case "022"
  42.                 Get_Full_App += "Autodesk Utility Design"
  43.             Case "023"
  44.                 Get_Full_App += "Autodesk Topobase Client"
  45.             Case "024"
  46.                 Get_Full_App += "Autodesk Civil"
  47.             Case "028"
  48.                 Get_Full_App += "DWG TrueView"
  49.             Case "029"
  50.                 Get_Full_App += "AutoCAD ecscad"
  51.             Case "030"
  52.                 Get_Full_App += "AutoCAD Structural Detailing"
  53.         End Select
  54.  
  55.         Get_Full_App += " "
  56.         Select Case AppVer
  57.             Case "1"
  58.                 Get_Full_App += "2002"
  59.             Case "2"
  60.                 Get_Full_App += "2004"
  61.             Case "3"
  62.                 Get_Full_App += "2005"
  63.             Case "4"
  64.                 Get_Full_App += "2006"
  65.             Case "5"
  66.                 Get_Full_App += "2007"
  67.             Case "6"
  68.                 Get_Full_App += "2008"
  69.             Case "7"
  70.                 Get_Full_App += "2009"
  71.             Case "8"
  72.                 Get_Full_App += "2010"
  73.             Case "9"
  74.                 Get_Full_App += "2011"
  75.             Case "A"
  76.                 Get_Full_App += "2012"
  77.             Case "B"
  78.                 Get_Full_App += "2013"
  79.             Case "D"
  80.                 Get_Full_App += "2014"
  81.             Case "E"
  82.                 Get_Full_App += "2015"
  83.             Case "F"
  84.                 Get_Full_App += "2016"
  85.         End Select
  86.  
  87.         Get_Full_App += " "
  88.         Select Case AppLang
  89.             Case "409"
  90.                 Get_Full_App += "(Английский)"
  91.             Case "407"
  92.                 Get_Full_App += "(Немецкий)"
  93.             Case "040C"
  94.                 Get_Full_App += "(Французский)"
  95.             Case "410"
  96.                 Get_Full_App += "(Итальянский)"
  97.             Case "040A"
  98.                 Get_Full_App += "(Испанский)"
  99.             Case "415"
  100.                 Get_Full_App += "(Польский)"
  101.             Case "040E"
  102.                 Get_Full_App += "(Венгерский)"
  103.             Case "405"
  104.                 Get_Full_App += "(Чешский)"
  105.             Case "419"
  106.                 Get_Full_App += "(Русский)"
  107.             Case "416"
  108.                 Get_Full_App += "(Бразильский/Португальский)"
  109.             Case "804"
  110.                 Get_Full_App += "(Упрощенный Китайский)"
  111.             Case "404"
  112.                 Get_Full_App += "(Традиционный Китайский)"
  113.             Case "412"
  114.                 Get_Full_App += "(Корейский)"
  115.             Case "411"
  116.                 Get_Full_App += "(Японский)"
  117.         End Select
  118.  
  119.         Return Get_Full_App
  120.     End Function

3. Запуск конкретного приложения осуществляется так:

Код - vb.net [Выбрать]
  1. ...
  2.         Dim AppPath As String = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\acad." & aVer & aName & "." & aLang & "\shell\open\command", "", Nothing)
  3.  
  4.         Dim Shll As Object = CreateObject("WScript.Shell")
  5.         Dim myRunString As String = Chr(34) & AppPath & Chr(34) & " /ld " & Chr(34) & IO.Path.GetDirectoryName(AppPath) & "\AecBase.dbx" & Chr(34) & " /product " & Get_Product_Name(aName) & " /language " & Chr(34) & Get_Lang_Sufix(aLang) & Chr(34) ' Отлично работает!!!
  6.         Shll.Run(myRunString, 0, False)
  7. ...
  8.  

Функции для определения параметров запуска приложения:

Код - vb.net [Выбрать]
  1.     Public Function Get_Lang_Sufix(ByVal AppLang As String) As String
  2.         Get_Lang_Sufix = ""
  3.         Select Case AppLang
  4.             Case "419"
  5.                 Get_Lang_Sufix = "ru-RU"
  6.             Case "409"
  7.                 Get_Lang_Sufix = "en-US"
  8.         End Select
  9.         Return Get_Lang_Sufix
  10.     End Function
  11.  
  12.     Public Function Get_Product_Name(ByVal AppName As String) As String
  13.         Get_Product_Name = ""
  14.         Select Case AppName
  15.             Case "000"
  16.                 Get_Product_Name = "C3D"
  17.             Case "001"
  18.                 Get_Product_Name = "ACAD"
  19.             Case "004"
  20.                 Get_Product_Name = "ACA"
  21.             Case "005"
  22.                 Get_Product_Name = "ACADM"
  23.             Case "007"
  24.                 Get_Product_Name = "ACADE"
  25.             Case "016"
  26.                 Get_Product_Name = "PNID"
  27.             Case "017"
  28.                 Get_Product_Name = "PLNT3D"
  29.         End Select
  30.         Return Get_Product_Name
  31.     End Function
  32.  


Вот и всё решение. Работает в фоне.

Единственный недостаток, что при запуске приложения SplashScreen таки отображается.


Тема закрыта.
« Последнее редактирование: 25-01-2016, 06:48:21 от Пашин Евгений »

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Я бы посоветовал все эти данные хранить, скажем в xml-файле. Твоя программа бы считывала данные из него, однако вы всегда сможете легко его править. Да и код будет меньше и работать удобнее. Но это ИМХО

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Я бы посоветовал все эти данные хранить, скажем в xml-файле. Твоя программа бы считывала данные из него, однако вы всегда сможете легко его править. Да и код будет меньше и работать удобнее. Но это ИМХО

Да, конечно! Здесь я просто для понимания выложил данные.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Да, конечно! Здесь я просто для понимания выложил данные.
Угадайте что я понял смотря на Ваш код.
з.ы. Если на каникулах будет скучно - почитайте это - клавиатура целей будет.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Угадайте что я понял смотря на Ваш код.
з.ы. Если на каникулах будет скучно - почитайте это - клавиатура целей будет.

Спасибо, разобрался! Двойной массив <Ключ>,<Значение>!
Правда классами получилось не хуже )))