Как отследить попытку открытия чертежа недоступного формата?

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

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Требуется отследить событие попытки открытия чертежа, сохранённого в формате более новом чем тот, который может быть открыт настоящим приложением. Т.е. например, отследит попытку открытия в AutoCAD 2009 чертежей формата DWG2013.

В документации искал по разделам DocumentCollection Events и Database Events, но не нашёл ничего похожего на то, что мне нужно. Как отследить интересующее меня событие?

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Варианты:
1. "Следить" за самим открытием. Когда пользователь открывает чертеж можно ведь "отловить" этот файл, до того как он начнет открываться? А из файла можно извлечь нужную информацию и проверить
2. Это событие - это-же Exception вроде...

Это мои предположения для размышления. Может натолкнут на идею) Лично я не в курсе

Отмечено как Решение Андрей Бушман 18-04-2016, 23:37:57

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Как отследить интересующее меня событие?
Думаю, что напрямую средствами AutoCAD API - никак.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Отследить попытку открытия чертежа можно - для этого есть события Application.DocumentMeneger.
Если попытка открытия файла неудачна, читаем первые 6 байт файла и по ним определяем версию чертежа.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Отследить попытку открытия чертежа можно - для этого есть события Application.DocumentMeneger.
Как я уже писал выше - среди событий DocumentCollection я не нашёл того, о чём спрашивал. У тебя есть какой-то конкретный вариант?

Если попытка открытия файла неудачна, читаем первые 6 байт файла и по ним определяем версию чертежа.
Я в курсе того, как определять версию формата. Мой вопрос был не об этом.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Application.DocumentManager.DocumentCreateStarted
Application.DocumentManager.DocumentCreated
Application.DocumentManager.DocumentCreationCanceled
По идее - как раз то, что нужно. Но нужно экспериментировать.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Application.DocumentManager.DocumentCreateStarted
Application.DocumentManager.DocumentCreated
Application.DocumentManager.DocumentCreationCanceled
По идее - как раз то, что нужно. Но нужно экспериментировать.
По идее - это не то, т.к. прежде чем создавать Document на основе Database, этот самый Database нужно заполнить контентом. Т.е. недостаёт события, сообщающего об [не]успешной операции предварительного чтения содержимого DWG-файла или о попытке начала чтения этого DWG. Документ может открываться и кликом мышки по файлу в проводнике Windows.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
По идее - это не то, т.к. прежде чем создавать Document на основе Database, этот самый Database нужно заполнить контентом.
Судя по тому, как работают эти события, то происходит примерно так:
Команда открытия документа -> событие DocumentCreateStarted -> чтение файла и наполнение Database -> событие DocumentCreated.
Если файл неподходящей версии, то будет, наверное, так (проверить просто-напросто не на чем):
Команда открытия документа -> событие DocumentCreateStarted -> чтение файла, неподходящая версия -> событие DocumentCreationCanceled.
Документ может открываться и кликом мышки по файлу в проводнике Windows.
И эти события срабатывают и в этом случае, по крайней мере в версиях 2014-2016.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Проверить смогу только завтра.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Проверить смогу только завтра.
Можешь не проверять. Это не работает.
Я так понимаю, что это можно словить только на уровне Win32 Hook. Никакое из API в AutoCAD не поможет. Конечно если речь идёт о том, что пользователь открывает файл, а не ты сам это делаешь программно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Конечно если речь идёт о том, что пользователь открывает файл, а не ты сам это делаешь программно.
О том.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Конечно если речь идёт о том, что пользователь открывает файл, а не ты сам это делаешь программно.
О том.
Ну и сразу напрашивается следующий вопрос. Ты обнаружил, что файл создан в более новой версии. Что ты будешь делать?
Можно поставить хук на окно, которое выводит сообщение о том, что файл создан не в той версии. Но что делать дальше, если AutoCAD в любом случае просит открыть файл?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Ну и сразу напрашивается следующий вопрос. Ты обнаружил, что файл создан в более новой версии. Что ты будешь делать?
Программно пересохраню файл, понизив версию DWG до нужной и продолжу открытие документа.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Программно пересохраню файл, понизив версию DWG до нужной и продолжу открытие документа.
Я не буду тебя спрашивать какими средствами ты собираешься это сделать, так как это будет наверняка оффтопом на этом форуме.
Можно закрыть при помощи Hook окно:


Это не слишком сложно. Но я вижу дальше два подводных камня:
1) не известно имя файла - как его узнать?
2) даже если имя файла стало известно, то его придётся всунуть в следующее диалоговое окно и нажать в нём кнопку Open (Открыть). Это теоретически возможно - понадобится еще один хук.



 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение