LazowskiAnton · Extensions

RulerSmith

Tieni premuto Ctrl+Shift sopra l’app di cui stai eseguendo il debug: il controllo sotto il puntatore mostra le sue dimensioni e frecce discrete indicano le distanze dai controlli circostanti. Rilascia i tasti e tutto scompare.

Gratuito · Visual Studio 2022 e 2026 · 14 lingue dell’interfaccia · nessuna telemetria

Perché RulerSmith

Lo stesso modulo senza e con RulerSmith: il contorno di un pulsante, le sue dimensioni e le distanze dai controlli vicini

Limiti reali, non una stima

Le dimensioni provengono da UI Automation, l’albero usato dalle utilità per la lettura dello schermo: ombre, sfumature e anti-aliasing non lo ingannano, come invece accade con un righello a pixel.

Le unità che scrivi

WPF e le pagine web dispongono gli elementi in unità indipendenti dal dispositivo: 76 × 32 è ciò che scrivi in XAML o CSS, e i pixel dello schermo (152 × 64 al 200 %) sono mostrati sotto.

Solo finché tieni premuto il tasto

Non viene calcolato né disegnato nulla finché non tieni premuto il tasto. La sovrapposizione non riceve mai clic né lo stato attivo e resta inattiva mentre il debugger è in pausa.

Gratuito, senza condizioni

Nessun abbonamento, nessuna versione «pro», nessuna raccolta di dati, nessun messaggio nella finestra Output o all’avvio. L’unica cosa che ti chiederemo — dopo che l’avrai usata per un po’ — è una valutazione sul Marketplace. Funziona con Visual Studio 2022 e 2026, x64 e ARM64.

Funzionalità

Misurazione

Avvia il debug, tieni premuto Ctrl+Shift e muovi il puntatore sopra l’app. Un nuovo controllo viene evidenziato da un contorno, sotto compaiono le sue dimensioni e le distanze si estendono verso i controlli vicini; i numeri seguono il puntatore da un controllo all’altro.

Un pulsante Salva con il contorno, le sue dimensioni e le distanze da Annulla, dalla casella del commento e dai bordi della finestra
Sullo schermoSignificato
Contorno sottileI limiti del controllo sotto il puntatore. Il testo o un’icona all’interno di un pulsante contano come il pulsante.
Button 76 × 32
152 × 64 px · 200 %
Il tipo e le dimensioni nelle unità dell’app; su un display con ridimensionamento, i pixel dello schermo e la scala su una seconda riga.
Freccia continuaLa distanza dal controllo più vicino su quel lato. I controlli che si toccano non mostrano frecce.
Freccia tratteggiataNessun controllo su quel lato: la distanza dal bordo del contenitore (l’area client di una finestra).

Il pannello RulerSmith

Debug → Pannello RulerSmith (anche in Visualizza → Altre finestre). La barra degli strumenti attiva e disattiva la misurazione, lo stesso interruttore di Misura layout sulla barra degli strumenti Debug, e ogni tipo di app separatamente: WPF, WinForms, Win32, Web. Sotto, l’ultima misurazione: il nome e l’automation id del controllo (per trovarlo in XAML), le sue dimensioni, la posizione nella finestra e ogni distanza con il controllo a cui arriva. La riga di stato spiega perché non viene disegnato nulla: nessun debug in corso, pausa su un punto di interruzione o misurazione disattivata.

Il pannello RulerSmith con il pulsante Salva misurato, le sue dimensioni e le distanze

Quali app

RulerSmith legge i controlli tramite UI Automation, quindi misura ciò che l’app espone lì, ovvero quello che i controlli standard fanno già di serie.

AppNote
WPFLe unità sono indipendenti dal dispositivo. La barra degli strumenti XAML trasparente che Visual Studio sovrappone a un’app WPF in debug viene ignorata; il contenuto delle schede viene trovato.
Windows FormsLe unità sono i pixel dell’app: 1:1 per un’app che supporta i DPI, adattati da Windows per una che non li supporta.
Win32, MFCFinestre create con CreateWindow e finestre di dialogo dalle risorse: pulsanti, caselle di modifica, caselle combinate, elenchi, alberi.
Pagine webEdge, Chrome e Firefox durante il debug: Visual Studio apre spesso un progetto web nel browser già in esecuzione. Le unità sono i pixel CSS. L’interruttore Web nel pannello le disattiva.

Non supportati: WinUI, UWP e MAUI. Un controllo personalizzato che non crea un automation peer è invisibile per UI Automation, e al suo posto viene misurato il contenitore.

Impostazioni

Strumenti → Opzioni → SmithWorks → RulerSmith. Ogni opzione ha una descrizione.

OpzionePredefinito
Tieni premuto per misurareCtrl+Shift
Misura durante il debugattivo
Mostra i pixel dello schermo sui display con ridimensionamentoattivo
Anima la comparsaattivo
Fai uscire le frecce delle distanze dal controlloattivo
Chiedi una valutazione sul Marketplaceattivo

Le impostazioni sono salvate in %LocalAppData%\RulerSmith.

Pagina delle opzioni di RulerSmith
La pagina delle opzioni.

FAQ

RulerSmith invia dati?

No. Tutto avviene sul tuo computer: un piccolo processo di sovrapposizione legge i controlli tramite UI Automation e disegna sullo schermo. Nessuna richiesta di rete, nessuna telemetria.

Viene evidenziata solo l’intera finestra (o un pannello grande). Perché?

L’app non espone a UI Automation i controlli al suo interno: di solito si tratta di controlli personalizzati senza automation peer. Eseguendo l’override di OnCreateAutomationPeer in un controllo di questo tipo, diventa misurabile e anche accessibile alle utilità per la lettura dello schermo.

Non viene disegnato nulla quando tengo premuto il tasto.

Verifica che una sessione di debug sia in corso e non in pausa, e che la riga di stato del pannello indichi Misurazione. Un tipo di app potrebbe essere disattivato nel pannello. Un altro programma potrebbe usare gli stessi tasti: scegli un’altra combinazione nelle impostazioni.

Perché si ferma a un punto di interruzione?

Un’app in pausa non può rispondere a UI Automation. La sovrapposizione resta inattiva finché non continui (F5).

WinUI, UWP o MAUI saranno supportati?

Per ora no. Se ti servono, dillo nel repository Feedback.

Posso misurare un’app senza Visual Studio?

Sì: avvia RulerSmith.Overlay.exe dalla cartella dell’estensione. Resta nell’area di notifica e misura qualsiasi finestra finché il tasto è premuto.

Dove segnalo un problema o suggerisco una funzionalità?

Apri una issue nel repository Feedback su GitHub: ci sono moduli per bug e idee (cambia i nomi privati). Puoi anche usare la scheda Q&A nel Marketplace.

Registro modifiche

1.0.2

1.0.1

1.0.0