Последние сообщения

Последние сообщения

Страницы: 1 2 [3] 4 5 ... 10
21
Добрый день!

сам код:

Код - Python [Выбрать]
  1. from win32com.client import Dispatch, gencache
  2. import inspect
  3.  
  4. def filtr_obj(obj):
  5.     """Возвращает список имён COM-объектов, в которые можно зайти."""
  6.     tmp = []
  7.    
  8.     # получаем тип объекта
  9.     type_obj = str(type(obj))
  10.    
  11.     # если это com объект а не штатная функция
  12.     if "win32com" in type_obj and not inspect.isbuiltin(obj) and not inspect.isfunction(obj):
  13.        
  14.         listNames = dir(obj)
  15.         for iName in listNames:
  16.             if not iName.startswith("_") or not iName.endswith("_"):
  17.                 tmp.append(iName)
  18.    
  19.     return tmp
  20.  
  21. def explore(obj, path, depth, max_depth, results, visited):
  22.     """Рекурсивно обходит дерево объектов COM API."""
  23.     if depth > max_depth:
  24.         return
  25.  
  26.     for name in filtr_obj(obj):
  27.         full_path = f"{path}.{name}" if path else name
  28.  
  29.         try:
  30.             value = getattr(obj, name)
  31.         except Exception:
  32.             # Если не удаётся получить атрибут — просто записываем путь и идём дальше
  33.             results.append(full_path)
  34.             continue
  35.  
  36.         results.append(full_path)
  37.  
  38.         # Чтобы избежать зацикливания (одни и те же объекты в разных местах)
  39.         if id(value) not in visited:
  40.             visited.add(id(value))
  41.             explore(value, full_path, depth + 1, max_depth, results, visited)
  42.  
  43. # ------------------- Запуск -------------------
  44. AcadAPI = gencache.EnsureModule('{5B3245BE-661C-4324-BB55-3AD94EBBFDD7}', 0, 1, 0)
  45. AcadObject = Dispatch('AutoCAD.Application.21', None, AcadAPI.IAcadApplication.CLSID)
  46.  
  47. results = []
  48. visited = set()
  49. explore(AcadObject, AcadObject.__class__.__name__, 1, max_depth=30, results=results, visited=visited)
  50.  
  51. with open("acad_object_tree.txt", "w", encoding="utf-8") as f:
  52.     f.write("\n".join(results))
  53.  
  54. print(f"Объектов собрано: {len(results)}")
  55.  

столкнулся с проблемой зацикливания - вот пример:

IAcadApplication.ActiveDocument.ActiveDimStyle.Application.ActiveDocument.ActiveDimStyle.Application.ActiveDocument.Application. и так далее

в коде можно понять что идентификаторы объектов:
IAcadApplication.ActiveDocument
и
IAcadApplication.ActiveDocument.ActiveDimStyle.Application.ActiveDocument
разные! не пойму почему так выходит. в общем не как не могу выйти из замкнутого круга..
22
2025?
На 2024 как и во всех остальных.
На 2025 теперь net 8.0 там переделывать практически всё.
23
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от izhgtumekhanik 13-08-2025, 13:19:12 »
KISS

Во во, Python - прост как пареная репа. У меня сложилось исторически - скоростная сборка (вижу цель - не вижу преград), один из постулатов который - "а лучшие ли ты выбрал инструменты для этого?"

А по сути вопроса - горячая перезагрузка - попробовал -> прикольная штука.
24
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от Алексей Кулик 13-08-2025, 12:50:15 »
азделять ответственность - эти слова да обществу в уши!
SOLID, KISS, DRY, "Банда четырех"... Все уже придумано до нас ))
25
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от izhgtumekhanik 13-08-2025, 11:52:13 »
нет конечно. если работает горячая перезагрузка, то можно переименовывать все
не помню что так можно было или не знал.. загуглил и увидел дату - 2021 год тогда я точно не знаю про это.

И у нас тут форум "AutoCAD .NET API", а не про python.
Только для сравнения. Следить за трендами в языках дабы облегчить необлегченное.
26
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от avc 13-08-2025, 11:44:37 »
но там нужно строго сохранять иерархию имен функций/методов и результаты
нет конечно. если работает горячая перезагрузка, то можно переименовывать все, кроме имен самих Автокадовских команд. Все было прекрасно... пока я что-то не сломал...
И у нас тут форум "AutoCAD .NET API", а не про python.
27
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от izhgtumekhanik 13-08-2025, 11:33:29 »
Горячая перезагрузка кода у меня работала на всех версиях .Net вплоть до самой свежей.

Аа что то припоминаю.. AppDomain - но там нужно строго сохранять иерархию имен функций/методов и результаты - очень напрягало это ограничение..
А в python - reload.module() - абсолютная свобода -> сменил имя функции и тут же из приложения ее можно вызвать и получить любой тип результата..

Использую встроенный в студию Dotfuscator для переименования классов. Реальной защиты кода не существует - все можно декомпилировать и полечить, не важно на C++ это было написано или на C#. Защищает только низкая цена программы.
На торрентах лежат программы чьи стоимости пожизненной лицензии - 300 руб. :))

В Python есть пару тройку компонентов что знаю - получше защищают приложение ну по крайней мере не разбирают за 5- 40 сек на марафонах по патчингу.

28
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от avc 13-08-2025, 11:17:35 »
я не как не мог выгрузить плагин из памяти и приходилось перезапускать программу и килить процессы связанные с ним так они тоже не дают заменить библиотеки плагина.
Горячая перезагрузка кода у меня работала на всех версиях .Net вплоть до самой свежей. Я уже привык кодить в процессе отладки - очень расслабляет. Но вот поменял систему, винду на 11, VS обновил и кирдык. Больше не работает горячая перезагрузка ни в одной версии Net. Копилот утверждает , что майкрософт нарочно отключает горячую перезагрузку в старых версиях .Net Framework. Но под Автокад 2026 и .Net6 тоже самое - одну букву в коде поменял - выскакивает окошко, что надо останавливать отладку и все перекомпилировать. Бесит ужасно. Что делать не знаю...

Помню как еще пытался защитить программу .Net от взлома - так малого того что инструменты для этого стоят больших денег например Themida так еще и как вирус распознается программа..
Использую встроенный в студию Dotfuscator для переименования классов. Реальной защиты кода не существует - все можно декомпилировать и полечить, не важно на C++ это было написано или на C#. Защищает только низкая цена программы.
И да - любую новую версию любой программы антивирусы могут банить. Не думаю что это как-то связано с .Net или обфускацией. Чтоб не писать False Positive во все антивирусы на каждую версию плагинов, я выделил все функции обновления программ, убийства процессов, скачки с интернета и т.п., что антивирусы не любят - выделил в отдельный Exe и обновляю его как можно реже. И, если все-таки обновляю, то сразу проверяю в VirusTotal и пишу во все антивирусы.
29
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от izhgtumekhanik 13-08-2025, 11:12:05 »
то зачастую можно и без САПР обойтись
Если речь о внешнем приложении - то скорее всего да тк много чего вышло с тех пор.. но это все время которое не воротишь..

Разделять ответственность - эти слова да обществу в уши! в обществе нет таких исторических сложившийся "технологий" разве что остается диверсифицировать.

Молчу что ИИ "дышит в затылок" и все это за бесплатно.. зп падают и все бегут быть разносчиками пиццы, зачем им идти инженеришками за грошики разрабатывать сложные технологии? менталитет?
30
AutoCAD .NET API / Re: AutoCAD 2025 - переползаю на Net8
« Последний ответ от Алексей Кулик 13-08-2025, 10:33:40 »
Вспомнил свои "болячки" - дебажил плагины .Net под другой САПР который тяжело запускается<...>
ИМХО если разделять ответственность, то зачастую можно и без САПР обойтись. Я, если что, про NET ;)
Страницы: 1 2 [3] 4 5 ... 10