Онлайн справка при нажатии F1 в ленте

Автор Тема: Онлайн справка при нажатии F1 в ленте  (Прочитано 8835 раз)

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

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

  • ADN
  • *
  • Сообщений: 2468
  • Карма: 698
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Это не безопасно. Но попробуй: https://forums.autodesk.com/t5/net/getting-ribbon-help-to-call-html/m-p/4943910#M40083
Всем привет! Тоже понадобилась такая штука. Кто-нибудь пользуется этим сейчас?
Если делать как в статье - через SendStringToExecute отправлять команду на открытие браузера с заданной страницей, то браузер выскакивает в плавающем окошке справки. И там, как я понял, есть некоторые ограничения. К примеру, если для доступа к заданной странице требуется авторизация, то страница не откроется, даже если пройти всю процедуру авторизации.
Если же выполнить (command "_.browser" "<тут адрес справочной страницы>") в командной строке - то откроется браузер в нормальном виде, не в окне справки. И там уже нет никаких проблем с авторизацией. Как бы заставить справку тоже открываться в браузере в нормальном виде?

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

  • ADN Club
  • *****
  • Сообщений: 1596
  • Карма: 351
  • Отец modplus.org
    • ModPlus
Всем привет! Тоже понадобилась такая штука. Кто-нибудь пользуется этим сейчас?
Я пользуюсь. У меня вся справка на сайте и решение из статьи отлично открывает её

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

  • Administrator
  • *****
  • Сообщений: 13193
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Если же выполнить (command "_.browser" "<тут адрес справочной страницы>") в командной строке - то откроется браузер в нормальном виде, не в окне справки. И там уже нет никаких проблем с авторизацией. Как бы заставить справку тоже открываться в браузере в нормальном виде?
Ну а если попробовать SendStringToExecute("(command \"_.browser\" \"<тут адрес справочной страницы>\")\n") ?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2468
  • Карма: 698
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Я пользуюсь. У меня вся справка на сайте и решение из статьи отлично открывает её
Так у тебя же нет на сайте авторизации, скорее всего. Тем более, которая проходит через корпоративный сервер авторизации, с которым ты знаком ;)
Просто абстрактные странички типа Google и т.п. открывает отлично. Но на корпоративные странички не пройти...

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

  • ADN
  • *
  • Сообщений: 2468
  • Карма: 698
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Ну а если попробовать SendStringToExecute("(command \"_.browser\" \"<тут адрес справочной страницы>\")\n") ?
То же самое происходит. Тут, видимо, Автокад как-то распознаёт, что команда BROWSER выполняется в контексте справки, и открывает браузер в справочном окне. И я так понимаю, изменение формы вызова команды вряд ли как-то на это повлияет. Надо как-то завершить процесс вызова справки, а потом выполнить команду.

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

  • Administrator
  • *****
  • Сообщений: 13193
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Тут, видимо, Автокад как-то распознаёт, что команда BROWSER выполняется в контексте справки, и открывает браузер в справочном окне.
Что-то я очень сильно сомневаюсь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 1596
  • Карма: 351
  • Отец modplus.org
    • ModPlus
Я чет запутался?
Если справку можно открыть в браузере операционной системы, то зачем ее открывать в "браузере автокада"?

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

  • ADN
  • *
  • Сообщений: 2468
  • Карма: 698
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Если справку можно открыть в браузере операционной системы, то зачем ее открывать в "браузере автокада"?
Так в том-то и вопрос - как это сделать? Я сделал всё как в статье описано и у меня справка открывается во встроенном в Автокад браузере. Вот я и ломаю голову - как её вытащить в нормальный браузер?

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

  • ADN Club
  • *****
  • Сообщений: 1596
  • Карма: 351
  • Отец modplus.org
    • ModPlus
Вот что у меня. Не помню уже точно, но вроде были какие-то нюансы с чем-то

Код - C# [Выбрать]
  1. #region ToolTip Hook
  2.  
  3. private static bool _dropNextHelpCall; // Flag to tell if the next message from AutoCAD to display it's own help should be ignored
  4. private static string _currentTooltip; // If not null, this is the HelpTopic of the currently open tooltip. If null, no tooltip is displaying.
  5.  
  6. //// ReSharper disable InconsistentNaming
  7. #pragma warning disable 1591
  8.         public enum WndMsg
  9.         {
  10.             WM_ACAD_HELP = 0x4D,
  11.             WM_KEYDOWN = 0x100,
  12.         }
  13.  
  14.         public enum WndKey
  15.         {
  16.             VK_F1 = 0x70,
  17.         }
  18. #pragma warning restore 1591
  19. //// ReSharper restore InconsistentNaming
  20.  
  21.         private void AutoCadMessageHandler(object sender, PreTranslateMessageEventArgs e)
  22.         {
  23.             if (e.Message.message == (int)WndMsg.WM_KEYDOWN)
  24.             {
  25.                 if ((int)e.Message.wParam == (int)WndKey.VK_F1)
  26.                 {
  27.                     // F1 pressed
  28.                     if (_currentTooltip != null && _currentTooltip.Length > 8 && _currentTooltip.StartsWith("https://modplus.org/"))
  29.                     {
  30.                         // Another implementation could be to look up the help topic in an index file matching it to URLs.
  31.                         _dropNextHelpCall = true; // Even though we don't forward this F1 keypress, AutoCAD sends a message to itself to open the AutoCAD help file
  32.                         object nomutt = AcApp.GetSystemVariable("NOMUTT");
  33.                         string cmd = $"._BROWSER {_currentTooltip} _NOMUTT {nomutt} ";
  34.                         AcApp.SetSystemVariable("NOMUTT", 1);
  35.                         AcApp.DocumentManager.MdiActiveDocument.SendStringToExecute(cmd, true, false, false);
  36.                         e.Handled = true;
  37.                     }
  38.                 }
  39.             }
  40.             else if (e.Message.message == (int)WndMsg.WM_ACAD_HELP && _dropNextHelpCall)
  41.             {
  42.                 // Seems this is the message AutoCAD generates itself to open the help file. Drop this if help was called from a ribbon tooltip.
  43.                 _dropNextHelpCall = false; // Reset state of help calls
  44.                 e.Handled = true; // Stop this message from being passed on to AutoCAD
  45.             }
  46.         }
  47.  
  48.         // AutoCAD event handlers to detect if a tooltip is open or not
  49.         private static void ComponentManager_ToolTipOpened(object sender, EventArgs e)
  50.         {
  51.             Autodesk.Internal.Windows.ToolTip tt = sender as Autodesk.Internal.Windows.ToolTip;
  52.  
  53.             if (tt == null)
  54.                 return;
  55.  
  56.             Autodesk.Windows.RibbonToolTip rtt = tt.Content as Autodesk.Windows.RibbonToolTip;
  57.  
  58.             if (rtt == null)
  59.                 _currentTooltip = tt.HelpTopic;
  60.             else
  61.                 _currentTooltip = rtt.HelpTopic;
  62.         }
  63.  
  64.         private static void ComponentManager_ToolTipClosed(object sender, EventArgs e)
  65.         {
  66.             _currentTooltip = null;
  67.         }
  68.  
  69.         #endregion

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

  • ADN
  • *
  • Сообщений: 2468
  • Карма: 698
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Вот что у меня.
Да, у меня так же, всё практически один-в-один. И у тебя справка в системном браузере открывается?

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

  • ADN Club
  • *****
  • Сообщений: 1596
  • Карма: 351
  • Отец modplus.org
    • ModPlus
И у тебя справка в системном браузере открывается?
Аж сходил перепроверил =))
Да, открывается в системном браузере. Все четенько

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

  • ADN
  • *
  • Сообщений: 2468
  • Карма: 698
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Значит, я где-то накосячил... Понял, спасибо! Пойду дебажить.

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

  • ADN
  • *
  • Сообщений: 2468
  • Карма: 698
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Да, это я намудрил. Проблема оказалась в том, что когда я формировал программно ленту, то для RibbonToolTip задал свойство не HelpTopic, а HelpSource:
Код - C# [Выбрать]
  1. if (_helpUrl != null)
  2.     tip.HelpSource = new Uri(_helpUrl, UriKind.Absolute);
И получилось, что HelpTopic у меня всегда был null. В этом случае, весь этот код из примера просто не работал! И поэтому ссылка обрабатывалась внутренним браузером Автокада. А я думал, что так и должно быть :)

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

  • Administrator
  • *****
  • Сообщений: 13193
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Дмитрий Загорулькин,
А ты еще думал, что AutoCAD такой интеллектуальный и перехватывает команду _BROWSER из ленты. :) Вообще-то, как сказано в документации, команда _BROWSER запускает зарегистрированный в системе браузер "по-умолчанию"...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2468
  • Карма: 698
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
А ты еще думал, что AutoCAD такой интеллектуальный и перехватывает команду _BROWSER из ленты.
Да, я как-то перемудрил  :D