2010-02-23 5 views
3

J'ai une application .NET qui contient une case à cocher (System.Windows.Forms.Checkbox). Ce composant (WindowsForms10.BUTTON.app.0.378734a1) n'est pas directement contrôlable dans AutoHotKEy à l'aide de "Control, Check" ou "ControlGet, Checked".Comment contrôler une case à cocher .NET à partir d'AutoHotKey?

Existe-t-il un moyen de contrôler ce composant en utilisant CallDLL ou un type d'hébergement CLR dans AutoHotKey?

Répondre

3

I fini en utilisant la fonction suivante:

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 
} 

J'utilise la hauteur (H) que la largeur de la case. Je soustrais 1pixel pour la bordure et 3 pixels supplémentaires pour la marge. Par conséquent: H - (1 + 2 * 3) = H - 7

Je suppose également que la couleur d'arrière-plan non cochée est une nuance de gris. Et que la coche est dans une nuance de vert.

Si l'une de ces hypothèses est incorrecte, cela ne fonctionnera pas.

+0

Cela fonctionne, merci beaucoup! Il semble que ControlGetPos ne puisse pas utiliser le texte de la case à cocher pour localiser le composant: / – Joril