Там нужен другой подход. Совсем не так как ожидается в теории. Вроде как никакого вмешательства в программу, а наделе баг на баге находишь у всех, в общем наелись сполна :)
Добро пожаловать в дивный мир. Там всё гораздо сложнее. А ещё приложения любят падать потому, что кто-то с ними общается и хочет узнать как они выглядят.
Так и есть не вспаханное минное поле.
Мышка это не проблема, а вот как понять на что мы кликаем.
Ну или узнать, что такое-то окно открылось с таким-то текстом.
Принцип , который я привёл будет работать на практически все случаи.
Только надо это кому-то сделать.
Тут зависит от задачи и для работы или для души.
В идеале нужны фильтры куда не лезть чтобы не упало.
При чём фильтры на уровне win32, UIA отдельно. Проверку winAPI не ломают программу точно, всё остальное на откуп программе.
Фильтры это кто родительское окно кто процесс ну и там усложнять надо.
Далее этого мало.
Если делать проверки из отдельного процесса то всегда есть риск напороться на баги программы.
Идеальным вариантом было бы использовать IAccessibleEx изнутри.
Тогда мы всегда бежим в UI потоке и уменьшаем гонки до нуля.
Но это всё прямо очень сложная система получается .
Там нужен другой подход. Совсем не так как ожидается в теории.
Вроде как никакого вмешательства в программу, а наделе баг на баге находишь у всех, в общем наелись сполна :)
Добро пожаловать в дивный мир. Там всё гораздо сложнее.
А ещё приложения любят падать потому, что кто-то с ними общается и хочет узнать как они выглядят.
В своё время пришёл к https://github.com/TestStack/UIAComWrapper , и даже там есть ошибки , которые не внесены в код увы.
Тесты это хороший подход. Проверено на практике.
Чем больше количество и чем больше покрытие тем лучше.
Ещё лучше проверять все пограничные значения там вроде NaN, Infinity, null, undefined, None и т.п.
Поведение вряд ли задокументировано, а вот при изменении технологии важно знать все мелкие детали для воспроизведения точного подобия.
для нового кода как раз подходит ненавистный TDD.
https://www.aihero.dev/skill-test-driven-development-claude-code
И получаем как раз то, что и хотели изначально.
Тесты не знают как устроено, код пишется пол тесты. Тесты создаются в соответствии со спецификацией.
За короткое время можно сделать довольно много рутиной работы , а дальше правим как нам надо.
Кстати, модельки и C++, а если к нас шаблоны и макросы и прочее, это ещё та затея :)
Что такое правильный ?
И цель то не создать новое, а тупо зафиксировать текущее положение вещей, чтобы любое изменение было зафиксировано.
Положим у нас есть
def sum(a,b): return a-b
Пишем тест, который проверяет там sum(1,1)==0
Зафиксировали текущее положение.
Далее, скажем, поняли мы, что надо исправить. Изменяем “-“ на “+” и получаем падающие тесты.
Без тестов мы бы не знали вообще как изменение влияет !
Ну и в конце обновляем тесты: sum(1,1)==2.
Я не утверждаю, что модельки сделают всё идеально за нас
Зато помогают здорово экономить время на некоторых вещах.
Это смотря какую работу.
Например простую работу как покрыть код тестами моделька делает на ура.
Берём старый код за пару минут получаем тесты. Гарантировано находятся баги.
На и дальше можно развивать код гораздо спокойнее.
Увы мир C++ настолько разнообразен , что в 2026 лучше с нуля учить Rust или что угодно не C++.
У нас есть проекты где до сих пор C++17, есть где запрет исключений, есть где запрет RTTI, есть где запрет ranges, лямбда и т.д.
Вопрос в том стоит ли тратить своё время на это сегодня когда модельки худо бедно сделают работу лучше чем кто-то с небольшим опытом плюсов.
У VSCode есть приятная возможность внедрить в веб сайты.
А Zed может таким похвастаться ?
Что-то можно если очень нужно.
https://msfn.org/board/topic/183352-proxhttpsproxy-and-httpsproxy-in-windows-xp-for-future-use/
https://browser.360totalsecurity.com/
Проблема и преимущество goto это возможность прыгнуть куда угодно, а не только выйти из цикла.
А здесь мы ограничиваем себя и упрощаем понимание кода.
Это в мире где все обновились.
А на деле только вот сейчас работают над переходом на 17 с 11.
Так что Kotlin вари таком раскладе здоров облегчает жизнь.
Энтерпрайзы именно так и работают по этой схеме и ничего ведь.
Корпорации только богатеют хотя изнутри мало кто действительно делает что-то существенное наперекор системе.
Или пойми ещё кто правильно ведёт работу.
А какие долгосрочные последствия будут?
Возьмём к примеру сотрудник нашёл проблему и донёс до начальства.
Начальство говорит не нужно ничего делать это лишние риски.
Далее проблема появляется у клиента и начальство просит разобраться.
Сотрудник находит причину , находит что ответить клиенту, жалоба закрыта.
Далее сотрудник поднимает тему, что надо бы таки починить и снова получает негативный отказ и требование начальства «заниматься своим делом».
Итого более сотрудник ничего не будет извещать заранее ведь это влияет на его отношения с начальством и бонусы.
Другие коллеги видя как обстоят дела так же перестают проявлять инициативу.
Зато начальник доволен всеми и все довольны им.
Замечательно выходит :)
А проблема ли это на самом деле ?
Зачем нужны конфликтные работники если можно иметь без конфликтных и спокойно работать.
Можно и желательно добавить линтеры с ограничением any.
https://typescript-eslint.io/blog/avoiding-anys/
Говорите как-будто РФ эта единственная страна с таким мышлением .
https://habr.com/ru/amp/publications/1022444/
Э.. как бы на этом построен весь C++.
Порядок имеет значение.
Добавляем перегрузку и получаем другие инварианты.
Ну то есть подход как в Rust только без удобств.
И даже там в итоге не все так просто и многие приходят к решению упростить через https://docs.rs/anyhow
Сегодня можно вместо Result вернуть std::expected.