Calibrate the MouseMeasure AutoHotkey Tool to Grab Calculated Lengths from Your Computer Monitor
Recently, a reader asked, “Do you think it is conceivable to create a screen ruler in AHK that can be calibrated to my native application ruler. The problem I have now is that I take tons of measurements off the screen and then I have to type that number back into a document. I would love to make a ruler that can basically calibrate with the native app ruler once and make the data from the AHK ruler transfer automatically to the clipboard or better yet straight to the document.”
I responded, “The application you’re looking at is quite conceivable. You can pick coordinates off the screen with the MouseGetPos command and save them. Then you can possibly use two clicks to calculate the difference between the two in pixels then convert it to your scale. There are a number of methods for sending data to documents. It is certainly within the realm of possibilities.”
I then searched the AutoHotkey board only to find that he had already posted the same Ruler question in the “Ask for Help” forum. Fortunately, AutoHotkey Forum user colt had already posted a response. With the heart of the work completed by colt, I decided to add an onscreen calibration method.
Pythagoras gave every high school math student a reason to remember his name. He provided the method for calculating the hypotenuse of a right triangle. For most people, the formula fell into the toolbox of things-I’ll-never-do-again. But for anyone who wants to measure distances on a computer screen, the Pythagorean Theorem returns with a vengeance.
Measuring Spans on a Computer Screen
Computer screens use pixels in a matrix of rows and columns to create text and images. Each pinpoint can vary in color and pixel density (dots per inch) depends upon the monitor’s resolution, but the dot matrix sits stationary on the screen. Capturing the number of pixels in a row or column does not present much of a challenge. However, the length of a hypotenuse (
C in the image) requires a special calculation:
While difficult to work out with pencil and paper, an AutoHotkey calculation can quickly return the distance in pixels between two sets of screen coordinates—(sx,sy) and (x,y):
MouseGetPos,x,y dx := x-sx dy := sy-y dist := round( ((dx)**2 + (dy)**2) **.5 ,3)
This snippet of code acts as the core for the script I call MouseMeasure.ahk. I modified the original code to allow for selectable ranges and units. Next, I added a new Hotkey combination for capturing a pixel scale from the computer screen—popping open a calibration GUI window for inputting the length of the calibration scale and units (e.g. miles, meters, inches,…).
I changed the previous measurement Hotkey to Shift+LButton and implemented an auto-calibration Hotkey Ctrl+LButton. Both Hotkeys use the same position-grabbing code—the user simultaneously holds down the modifying key and the left mouse button while dragging the mouse across the computer screen. I tested the new code on a map of Rhode Island.
Once calibrated to the onscreen scale, the measurement tool (Shift+LButton) captures the calculated distance between any two points (as a crow flies) on the computer screen.
Note: The Shift+LButton subroutine also saves the measured distance in the Windows Clipboard for pasting into other documents.
To manually open and set calibration, use the Ctrl+Alt+Z Hotkey combination. I added a MsgBox window with instructions that pops up when the script first loads. (Comment out the MsgBox line with a semi-colon if you find the Help window annoying.)
If while calibrating or measuring onscreen distances, you find your mouse a little wobbly, you may want to consider Hotkey techniques found in the MousePrecise.ahk script. Toggling a single key in the numeric keypad holds down the left mouse button while using the number keys to incrementally move the cursor pixel-by-pixel. You can find a discussion of MousePrecise in the book AutoHotkey Hotkey Tips, Tricks, Techniques, and Best Practices.
The final script:
Pixels := 96 NumUnits := 1 Units := Inches Gui, +ToolWindow Gui, Add, Text, , Use Control+LeftMouseClick, Hold, and Drag`rfor Auto-Calibrate Gui, Add, Edit, vPixels w75 Section, %Pixels% Gui, Add, Text, ys , Pixel Range Gui, Add, Edit, vNumUnits w75 xm section, 1 Gui, Add, Text, ys , Calibration range Gui, Add, Edit, VUnits w75 xm section, Inches Gui, Add, Text, ys , Calibration Units Gui, Add, Button, gCalibrate ys ,Submit scaleFactor := NumUnits/Pixels ; .568 ;your calibration factor to convert pixels to units Help = ( To Calibrate Range: 1. Cursor at start point — CTRL+LButton and hold. 2. Drag to end of scale and release. 3. Enter length of scale and units i.e. 10 miles. Manual Calibration: CTRL+ALT+Z To Measure Distance: 1. Cursor at starting point — SHIFT+LButton and hold. 2. Drag to end of measurement and release. 3. Distance displayed and saved to Clipboard. CTRL+ALT+F12 for this Help Message. ) HelpMe: MsgBox, 1, MouseMeasure Help, % Help Return ^!F12::GoSub, HelpMe Ctrl & LButton:: Shift & LButton:: ;hold down shift and left mouse button to start measuring mouseGetPos,sx,sy ;start position to measure from setTimer updatePos,50 return Shift & LButton Up:: ;release to capture measurement setTimer updatePos,off tooltip distance measured is : %distCalibrated% %units% clipboard := distCalibrated Sleep, 10000 ToolTip return Ctrl & LButton Up:: setTimer updatePos,off ToolTip GuiControl, , Pixels, %dist% ManSet: Gui, Show, , Scale Calibration Return ^!Z::GoSub, ManSet updatePos: mouseGetPos,x,y dx := x-sx dy := sy-y dist := round( ((dx)**2 + (dy)**2) **.5 ,3) distCalibrated := round(dist * scaleFactor,3) tooltip [%dx%:%dy%]`n%dist% px`n%distCalibrated% %units% return Calibrate: Gui, Submit scaleFactor := NumUnits/Pixels Return
Click the Follow button at the top of the sidebar on the right of this page for e-mail notification of new blogs. (If you’re reading this on a tablet or your phone, then you must scroll all the way to the end of the blog—pass any comments—to find the Follow button.)
This post was proofread by Grammarly
(Any other mistakes are all mine.)
(Full disclosure: If you sign up for a free Grammarly account, I get 20¢. I use the spelling/grammar checking service all the time, but, then again, I write a lot more than most people. I recommend Grammarly because it works and it’s free.)
Find my AutoHotkey books at ComputorEdge E-Books!
Find quick-start AutoHotkey classes at “Robotic Desktop Automation with AutoHotkey“!