Wie Handle von ComboBox herausfinden?

  • Hallo!

    Ich habe mal wieder ne Spezial Frage an euch.

    Folgendes Problem: In den 2 angehängten Bildern seht ihr eine Combobox. Von dieser hab ich mit dem WindoInfo Tool das Handle gesucht.
    Nur besteht eine Combobox anscheinend aus 2 (?!) Controls mit jewails unterschiedlichen Handles, Ids usw. (S. Foto 1 und 2)

    combo1.jpg

    combo2.jpg


    Und nun die Herausforderung: Angenommen ich hab das Handle vom "inneren Teil" des Controls (Foto 1), wie bekomme ich daraus das Handle des "echten" Controls. (Foto 2)

    Ich tappe da irgentwie komplett im Dunkeln...vlt habt ihr ja eine Idee?

    DANKE!

  • Probier mal das Parent-Handle von dem Edit (das innere Control) rauszukriegen, vlt ist das die Combobox.

  • Ein Control ist defacto ein Window.
    AutoIt macht da nur eine stärkere Trennung indem du diese Windows mit der ID ansprichst.
    Sprich du kannst den WinAPI Befehl auch da anwenden.
    Hab da aber nie Tests gemacht also kann ich dir nicht versprechen, dass das so klappt.

    • Offizieller Beitrag

    Gibt genau dafür ein Bsp. in der Hilfe:

  • Mit _GUICtrlComboBox_GetComboBoxInfo kann ich das Edit herausfinden wenn ich das echte Control Handle kenne.
    Wenn ich jedoch nur das Handle des Edits habe komme ich damit leider nicht auf das "richtige" Handle zurück.

    Allerdings hat mich die Idee von CentuCore zur lösung gebraucht! Der Befehl _WinAPI__WinAPI_GetParent funktioniert wirklich auch mit Controls! Und da bekomme ich genau das Handle das ich gerne haben möchte. ;)
    -> Wieder was gelernt!


    Danke für die Hilfe!

    • Offizieller Beitrag

    Wenn ich jedoch nur das Handle des Edits habe komme ich damit leider nicht auf das "richtige" Handle zurück.

    ?? - Na klar, Edit ist Child vom Combo. Somit bekommst du über die Parentabfrage auch das Combo-Hwnd

    AutoIt
    If _GUICtrlComboBox_GetComboBoxInfo($idCombo, $tInfo) Then
            MemoWrite("Handle to the ComboBox .....: " & DllStructGetData($tInfo, "hCombo"))
            MemoWrite("Handle to the Edit Box .....: " & DllStructGetData($tInfo, "hEdit"))
            MemoWrite("Handle to the drop-down list: " & DllStructGetData($tInfo, "hList"))
        EndIf
    
    
    	$hParent = _WinAPI_GetParent(DllStructGetData($tInfo, "hEdit"))
    	ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $hParent --> " & $hParent & @LF)

    Und was bitte meinst du mit echten Handle? Gibt es denn unechte? - Klär mich mal auf. :rolleyes:

  • Das ist aber kein Handle, sondern die AutoIt interne ID.
    Die kannst du per _WinAPI_GetWindowLong() abfragen mit $GWL_ID.
    Das echte Handle kriegst du mit GUICtrlGetHandle().
    Im Endeffekt baut AutoIt auch nur auf der WinAPI auf und verwendet dessen "Controls"...genau genommen sind das alles Windows.

    2 Mal editiert, zuletzt von CentuCore (30. Juli 2015 um 17:43)