views:

158

answers:

1

I have a .NET application that contains a checkbox (System.Windows.Forms.Checkbox). This component (WindowsForms10.BUTTON.app.0.378734a1) is not directly controllable in AutoHotKEy using "Control,Check", or "ControlGet,Checked".

Is there a way of controlling this component using CallDLL, or some kind of CLR hosting within AutoHotKey?

A: 

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.

Richard