Arbeiten mit Checkboxen die sich in einer Listbox befinden.

  • Hallo,
    ich möchte mir ein Script schreiben, das eine Anwendung (LingoPad) automatisch installiert.
    Das Steup enthält u.a. eine "TNewCheckListBox" in der sich die eigentlichen Checkboxen befinden.
    In der AutoIt-Version 3.2.8.2 mit der AutoLib, konnt man z.B.mit dem Befehl "_Listbox_ClickItem($ControlHandle, 0)" die erste CheckBox in dieser ListBox anklicken.


    Nur jetzt setze ich die AutoIt-Version 3.2.10.0 ein und da gibt es ja keine AutoLib mehr.
    Nun suche ich in dieser Version die entsprechenden Befehle um diese CheckBoxen weiterhin auszuwerten.
    Irgendwie scheinen die Befehle die da im ListBox-Management aufgeführt sind, diese Möglichkeiten nicht mehr zur Verfügung zu stellen (oder ich komme mit der englischen Hilfe nicht so recht klar).
    Ich möchte aber nicht nur eine CheckBox anklicken, sondern auch den momentanen Zustand der CheckBox auslesen.

    MfG:
    BigRox

    Einmal editiert, zuletzt von BigRox (12. Februar 2008 um 13:03)

  • Es ist ne ListBox...
    Die Funktion ist rausgeflogen...
    Ich habs hier mal nachgebaut:

    Spoiler anzeigen
    [autoit]

    #include <GUIListBox.au3>
    #include <WinAPI.au3>

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

    ;Opt('MustDeclareVars', 1)

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

    $Debug_LB = False ; Check ClassName being passed to ListBox functions, set to True and use a handle to another control to see it work

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

    Local $hGUI, $hListBox

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

    $hGUI = WinGetHandle("Setup - LingoPad")
    WinActivate($hGUI)
    $hListBox = ControlGetHandle($hGUI,"","TNewCheckListBox1")

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

    ; Show the item selection state
    MsgBox (4160, "Information", "Item 5 Selected: " & _GUICtrlListBox_GetItemData ($hListBox, 2))
    _Listbox_ClickItem($hListBox,2)
    GUICreate("hi")
    GUISetState()
    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    Func _Listbox_ClickItem($hWnd, $iIndex, $sButton="left", $iClicks=1)
    Local $iX, $iY, $tPoint, $tRect

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

    $tRect = _GUICtrlListBox_GetItemRectEx($hWnd, $iIndex)
    _Lib_GetXYFromRect($tRect, $iX, $iY)
    $tPoint = _WINAPI_GetMousePos()
    _WinAPI_ShowCursor(False)
    ControlClick($hWnd,"","",$sButton,$iClicks,$iX,$iY)
    $iX = DllStructGetData($tPoint, "X")
    $iY = DllStructGetData($tPoint, "Y")
    MouseMove($iX, $iY, 0)
    _WINAPI_ShowCursor(True)
    EndFunc

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

    Func _Lib_GetXYFromRect(ByRef $tRect, ByRef $iX, ByRef $iY)
    $iX = DllStructGetData($tRect, "Left")
    $iY = DllStructGetData($tRect, "Top" )
    EndFunc

    [/autoit]
  • Hallo progandy,
    zuerst,danke für deine Hilfe.
    Ich habe dein Script eben ausprobiert, leider funktioniert es nicht.

    Mit dem Befehl "_GUICtrlListBox_GetItemData" kann ich nichts anfangen.
    Dieser Befehl gehört leider zu den vielen Befehlen, die bei mir nicht funktionieren.

    Bei diesem Befehl kommt immer "False" als Rückgabewert zurück, egal ob die Checkbox markiert ist oder nicht.

    Wieso hat man eigentlich den Befehl zum anklicken einer Checkbox rausgeworfen, ich schätze nämlich, das dieser Befehl öffters gebraucht wird ?
    (Ich verwende u.a. daher nur noch die AutoIt-Version 3.2.8.2 mit der AutoLib, zudem haben die neuen Versionen wohl einige Fehler die sie für mich leider nicht verwendbar machen).


    MfG
    BigRox

  • Hmm ,ja _GUICtrlListBox_GetItemData hab ich auch nur getestet. Das geht nicht.
    Aber der ItemClick sollte gehen, oder?

  • Hallo progandy ,
    ich habe dein Script eben nocheinmal in das vorhandene Installationsscript für Lingopad angepasst und dann nochmals getestet.

    Also der Befehl "_GUICtrlListBox_GetItemData" gibt immer eine 0 (Fehlerwert) zurück, egal in welchem Zustand sich die Checkbox befindet.
    Der Befehl "_ListBox_ClickItem" arbeitet dagegen einwandfrei.

    MfG:
    BigRox