I ended up using the following function:
IsChecked(Check_box_name)
{
ControlGetPos,X,Y,W,H,%Check_box_name%
Loop % H - 7
{
CY := Y + 1 + A_index
Loop % H - 7
{
CX := X + 1 + A_index
PixelGetColor,color,%CX%,%CY%,RGB
R := (color >> 16) & 0xFF
G := (color >> 8) & 0xFF
B := color & 0xFF
If (Abs(R - B) < 10) && (Abs(R - G) > 10)
{
return true
}
}
}
return false
}
I'm using the height (H) as the width of the checkbox.
I subtract 1pixel for the border, and a further 3 pixels for the margin.
Hence: H - (1 + 2 * 3) = H - 7
I also assume that the unchecked background colour is a shade of grey. And that the check mark is in a shade of green.
So if any of these assumptions are incorrect then it won't work.