RulerSmith
Удерживайте Ctrl+Shift над приложением, которое вы отлаживаете: элемент под указателем покажет свой размер, а мягкие стрелки — расстояния до элементов вокруг него. Отпустите клавиши — и всё исчезнет.
Бесплатно · Visual Studio 2022 и 2026 · 14 языков интерфейса · без телеметрии
Зачем RulerSmith

Настоящие границы, а не догадка
Размеры берутся из UI Automation — того же дерева, которым пользуются средства чтения с экрана, — поэтому тени, градиенты и сглаживание его не обманут, как обманывают пиксельную линейку.
Те единицы, которые вы пишете
WPF и веб-страницы размечаются в аппаратно-независимых единицах: 76 × 32 — это то, что вы пишете в XAML или CSS, а экранные пиксели (152 × 64 при 200 %) показаны под ним.
Только пока клавиша удерживается
Пока вы не удерживаете клавишу, ничего не вычисляется и не рисуется. Наложение никогда не перехватывает щелчки и фокус и отдыхает, пока отладчик приостановлен.
Бесплатно и без подвохов
Без подписок, без «pro»-версии, без сбора данных и без сообщений в окне «Вывод» или при запуске. Единственное, о чём мы когда-нибудь попросим, — после того как вы им немного попользуетесь, — поставить оценку в Marketplace. Работает в Visual Studio 2022 и 2026, x64 и ARM64.
Возможности
- Размер элемента под указателем с его типом (Button, ComboBox…) — в единицах приложения и в экранных пикселях на масштабированном экране.
- Отступы до соседей: ближайший элемент с каждой стороны, а если его нет — край контейнера; те самые линии, которые вы нарисовали бы вручную.
- DPI для каждого монитора: учитывается масштаб каждого монитора, приложения WinForms и Win32 измеряются в их собственных пикселях — с поддержкой DPI или без неё.
- Панель RulerSmith: имя элемента и его automation id, размер, положение и отступы с тем, чем они заканчиваются; переключатели измерения и каждого типа приложений.
- Мягкое появление: контур плавно проявляется, затем из элемента вырастают стрелки — или всё сразу, или совсем без анимации.
- Привязка к сеансу отладки: запускается по F5, измеряет только отлаживаемое приложение (и то, что оно открывает, например WebView2 или браузер веб-проекта) и останавливается вместе с сеансом.
Измерение
Запустите отладку, удерживайте Ctrl+Shift и ведите указатель по приложению. Новый элемент обводится контуром, под ним появляется размер, а к соседям разбегаются отступы; числа следуют за указателем от элемента к элементу.

| На экране | Значение |
|---|---|
| Тонкий контур | Границы элемента под указателем. Текст или значок внутри кнопки считаются кнопкой. |
| Button 76 × 32 152 × 64 px · 200 % | Тип и размер в единицах приложения; на масштабированном экране — экранные пиксели и масштаб второй строкой. |
| Сплошная стрелка | Отступ до ближайшего элемента с этой стороны. У соприкасающихся элементов стрелки нет. |
| Пунктирная стрелка | С этой стороны элементов нет: отступ до края контейнера (клиентской области окна). |
Панель RulerSmith
Отладка → Панель RulerSmith (также в меню Вид → Другие окна). Панель инструментов включает и выключает измерение — тот же переключатель, что Измерение разметки на панели инструментов «Отладка», — и каждый тип приложений отдельно: WPF, WinForms, Win32, Web. Ниже — последнее измерение: имя элемента и его automation id (по нему элемент находится в XAML), размер, положение в окне и каждый отступ с элементом, у которого он заканчивается. Строка состояния объясняет, почему ничего не рисуется: отладка не запущена, остановка в точке останова или измерение выключено.

Какие приложения
RulerSmith читает элементы через UI Automation, поэтому измеряет то, что приложение там предоставляет, — а стандартные элементы управления делают это сразу.
| Приложение | Примечания |
|---|---|
| WPF | Единицы аппаратно-независимые. Прозрачная панель инструментов XAML, которую Visual Studio накладывает на отлаживаемое WPF-приложение, пропускается; содержимое вкладок находится. |
| Windows Forms | Единицы — пиксели приложения: 1:1 для приложения с поддержкой DPI, растянутые Windows для приложения без неё. |
| Win32, MFC | Окна, созданные через CreateWindow, и диалоги из ресурсов: кнопки, поля ввода, поля со списком, списки, деревья. |
| Веб-страницы | Edge, Chrome и Firefox во время отладки — Visual Studio часто открывает веб-проект в уже запущенном браузере. Единицы — CSS-пиксели. Переключатель Web на панели их отключает. |
Не поддерживаются: WinUI, UWP и MAUI. Пользовательский элемент, который не создаёт automation peer, невидим для UI Automation — вместо него измеряется его контейнер.
Настройки
Средства → Параметры → SmithWorks → RulerSmith. У каждого параметра есть описание.
| Параметр | По умолчанию |
|---|---|
| Удерживать для измерения | Ctrl+Shift |
| Измерять во время отладки | вкл. |
| Показывать экранные пиксели на масштабированных экранах | вкл. |
| Анимировать появление | вкл. |
| Стрелки отступов вырастают из элемента | вкл. |
| Попросить оценку в Marketplace | вкл. |
Настройки хранятся в %LocalAppData%\RulerSmith.

Вопросы и ответы
Отправляет ли RulerSmith какие-либо данные?
Нет. Всё происходит на вашем компьютере: небольшой процесс наложения читает элементы через UI Automation и рисует на экране. Никаких сетевых запросов, никакой телеметрии.
Обводится только всё окно (или большая панель). Почему?
Приложение не предоставляет UI Automation элементы внутри него — обычно это пользовательские элементы без automation peer. Переопределите в таком элементе OnCreateAutomationPeer — и его можно будет измерить, а заодно он станет доступен средствам чтения с экрана.
При удержании клавиши ничего не рисуется.
Проверьте, что сеанс отладки запущен и не приостановлен, а в строке состояния панели написано Измерение. Возможно, тип приложения выключен на панели. Те же клавиши может использовать другая программа: выберите другое сочетание в настройках.
Почему в точке останова всё останавливается?
Приостановленное приложение не может отвечать UI Automation. Наложение отдыхает, пока вы не продолжите выполнение (F5).
Будут ли поддерживаться WinUI, UWP или MAUI?
Пока нет. Если они вам нужны, напишите об этом в репозитории Feedback.
Можно ли измерять приложение без Visual Studio?
Да: запустите RulerSmith.Overlay.exe из папки расширения. Он живёт в области уведомлений и измеряет любое окно, пока удерживается клавиша.
Где сообщить о проблеме или предложить идею?
Создайте issue в репозитории Feedback на GitHub — там есть формы для ошибок и идей (конфиденциальные имена лучше изменить). Также можно воспользоваться вкладкой Q&A на Marketplace.
История изменений
1.0.2
- Однократная просьба об оценке в Marketplace, когда расширение уже было полезным, — с кнопками «Позже» и «Больше не спрашивать» и настройкой, которая её отключает.
1.0.1
- Ссылка «Оценить на Marketplace» в настройках.
1.0.0
- Первый публичный выпуск.