Закрытие окна Измерений

Автор Тема: Закрытие окна Измерений  (Прочитано 5081 раз)

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

Оффлайн filatАвтор темы

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Закрытие окна Измерений
« : 12-05-2021, 08:40:43 »
В продолжение вопроса об окне Измерений, повторюсь:
Окно через winapi32 можно найти по имени, че нить вроде этого:

https://coderoad.ru/7942974/WinApi-FindWindow-%D0%BF%D0%BE-%D1%87%D0%B0%D1%81%D1%82%D0%B8-%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

Закрыть окно можно через:
https://coderoad.ru/18156002/%D0%92-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8-win32-C-%D1%87%D1%82%D0%BE%D0%B1%D1%8B-%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8C-%D0%BE%D0%BA%D0%BD%D0%BE-%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD-%D0%BB%D0%B8-%D1%8F-%D0%B2%D1%8B%D0%B7%D0%B2%D0%B0%D1%82%D1%8C-DestroyWindow
Миша, как всегда зрит в корень вопроса. Я и сам думал решить эту задачу с помощью инструментов winapi32, только вот не предполагал, что она окажется, мягко говоря, не простой.
Я раньше уже имел дело с winapi32 и вот привожу пример кода закрытия окна Contour Flange, который у меня точно работает:
Код - vb.net [Выбрать]
  1.     Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As Long, ByVal lParam As Long) As Long
  2.     Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$) As IntPtr
  3.  
  4.     Sub
  5.         Dim handl As Integer = FindWindowEx(0, 0, Nothing, "Contour Flange")
  6.         SendMessage(handl, &H10, Nothing, Nothing)
  7.     End Sub
А вот для окна Measure хэндл находиться, но сообщение о закрытии ни к чему не приводит. Еще пробовал применить функцию PostMessage - с тем же результатом.  :(
Очевидно, что внешне названные окна отличаются и, видимо, отличия не только в графике, но и в инструментах работы с ними.
Даже и не знаю, куда дальше копать!?  :o

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Закрытие окна Измерений
« Ответ #1 : 12-05-2021, 16:57:25 »
Ты знаешь, может окна и разные, уже лет 13 как работа с окнами может осуществляться не через winapi32, а через WPF. Я с WPF вообще не знаком
Можешь утилиту поюзать из вижуал студио может поможет


Оффлайн filatАвтор темы

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Закрытие окна Измерений
« Ответ #2 : 12-05-2021, 18:39:53 »
Посмотрел и подзавис!  :-X
Там даже не одно окно, а несколько..., да еще и с жутким классом...
Не уверен, что найду нормальное решение этой задачи, но, как настоящий извращенец, я её решил, пока, через ж! То бишь вызовом команды "гашения видимых зависимостей" - она и окно измерений закрывает и сама быстро финализируется!  ;D 8) ;D

Оффлайн filatАвтор темы

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Закрытие окна Измерений
« Ответ #3 : 14-05-2021, 12:04:32 »
Оказывается, функция FindWindow по названию "Measure" выдает не тот хэндл - видимо он принадлежит одному из дочерних окон и, по этому, закрытие не происходит.
Однако Measure добавляется в коллекцию DockableWindows и там есть актуальный действительный хэндл окна и тогда можно выполнить закрытие:
Код - vb.net [Выбрать]
  1. Call SendMessage(m_inventorApplication.UserInterfaceManager.DockableWindows.Item("Measure").HWND, &H10, 0, 0)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Закрытие окна Измерений
« Ответ #4 : 14-05-2021, 13:15:57 »
Однако Влад таки победил инвентор?

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Закрытие окна Измерений
« Ответ #5 : 14-05-2021, 13:17:47 »
Однако Влад таки победил инвентор?
Я бы сказал не победил, а сломал... :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн filatАвтор темы

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Закрытие окна Измерений
« Ответ #6 : 14-05-2021, 13:22:25 »
Однако Влад таки победил инвентор?
Я еще не оставляю надежны, найти решение задачи средствами API, вот только недоумеваю  почему у DockableWindows отсутствует метод Close  :D