Checkbox mit 2 Aktionen

  • Hallo,

    ich möchte mithilfe einer Checkbox den Registryeintrag von dem Numlock ändern. Soweit eig. ganz einfach.

    Spoiler anzeigen
    [autoit]

    $checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 30, 135, 140, 25)
    GUICtrlSetData($checkbox1, "Checkbosx1")
    GUICtrlSetOnEvent($checkbox1, "Checkbox1")

    [/autoit] [autoit][/autoit] [autoit]

    Func Checkbox1()
    $read = GUICtrlRead($Checkbox1)
    RegWrite ("HKEY_CURRENT_USER\Control Panel\Keyboard", "InitialKeyboardIndicators", "REG_SZ", 2)
    EndFunc

    [/autoit]


    Nun habe ich den Wert 2 in der registry wenn ich die Box aktiviert habe. Wenn ich meine GUI aufrufe, soll der Haken da auch stehenbleiben. Das mache ich so:

    [autoit]

    $var = RegRead("HKEY_CURRENT_USER\Control Panel\Keyboard", "InitialKeyboardIndicators")
    If $var = 2 Then
    ControlCommand("Installationen", "", 9, "Check", "")
    EndIf

    [/autoit]


    Nun zum eigentlichen Problem: Möchte ich den Wert ändern, also die Box "unchecken", dann soll auch der Wert von 2 auf null geändert werden. wie kann ich das anstellen? Habe da irgendwie an eine Whileschleife gedacht und dann den Wert ändern, wenn die Box "unchecked" wird. Mir erscheint das aber bischen kompliziert...

  • [autoit]


    #include <GUIConstants.au3>
    Opt("GUIOnEventMode", 1)
    #region - GUI Create
    GUICreate('', 100, 100)
    $cbox = GUICtrlCreateCheckbox("bla", 8, 8)
    GUICtrlSetOnEvent(-1, "_checkbox")
    GUISetState()
    #endregion - GUI Create

    [/autoit][autoit][/autoit][autoit]

    #region - GUI SelectLoop
    While 1
    Sleep(100)
    WEnd
    #endregion - GUI SelectLoop

    [/autoit][autoit][/autoit][autoit]

    Func _checkbox()
    If GUICtrlRead($cbox) = 1 Then
    MsgBox(0, 0, "Wert 2 setzen")
    ElseIf GUICtrlRead($cbox) = 4 Then
    MsgBox(0, 0, "Wert 0 setzen")
    EndIf
    EndFunc ;==>_checkbox

    [/autoit]
  • Da wären wir wieder bei dem Thema: Sollte man bei Checkboxen und Radions nicht eigentlich BitAnd nehmen?

    [autoit]

    If BitAnd(GUICtrlRead($cbox), $GUI_CHECKED) Then

    [/autoit]
    • Offizieller Beitrag

    Da wären wir wieder bei dem Thema: Sollte man bei Checkboxen und Radions nicht eigentlich BitAnd nehmen?

    Das bedarf eigentlich keiner Diskussion:

    Zitat von Hilfe AutoIt

    Bei Checkboxen und Radiobuttons können mehrere Statuse als $GUI_FOCUS und $GUI_CHECKED zurückgegeben werden. So ist z. B. BitAnd(GUICtrlRead($Item),$GUI_CHECKED) zu verwenden um zu sehen ob ein Control markiert ist.

    Wenn der auszulesende Wert eine Bitsumme enthalten kann, muß ich zwingend mit BitAnd selektieren. Alles andere ist Lotterie.