ein Control direkt in der Taskleiste anzeigen... aber wie?

  • Hallo

    Ich versuche ein Programm von mir weiter zu entwickeln. Bisher ist das in ner relativ normalen GUI. Auf Anregung/Anfrage einiger Nutzer soll ich versuchen,
    Das "Ding" irgendwie in die Taskleiste zu bekommen. zum Beispiel wie beim Programm "NetSpeedMonitor".
    Ich würd das dann so umschreiben, dass daraus keine GUI mit Buttons mehr ist, sondern eine ComboBox mit ner Dropdown(/-up)Funktion.

    Aber wie soll ich das anfangen? Wie krieg ich ne Combobox in die Taskleiste?

  • hi i2c

    bei diesem Link war ich bereits und hab mir auch die nötigen Files besorgt. Allerdings ist die GUIList.au3 offenbar unvollständig/fehlerhaft. Krieg da immer Warnungen und Fehlermeldungen.

    Spoiler anzeigen


    Da fehlen mir 2 Funktionen und Variablen sind nicht korrekt.

    Hat evtl jemand eine funktionierende?


    Edit:
    Hab nen Link mit funktionierender AnyGui.au3 hier im Forum gefunden ^^ nach gut 3 Stunden
    hier der Link

    Mal sehen wie weit ich ohne Hilfe komme :D

  • Okay, und schon komm ich nicht weiter.

    das hier ist mein TestScript

    [autoit]


    #include <ANYGUI2.au3>
    ;~ #include <ANYGUI.au3>

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

    WinMinimizeAll()
    $h_taskbar = _GuiTarget("", 0, "Start", "ToolbarWindow322")
    ;~ $h_taskbar = _GuiTarget("", 0, "Start", "40965")
    $a_info = _TargetaddCombo ("", 575, 0, 100, 120, -1, -1, $h_taskbar)
    GUICtrlSetData($a_info[0], "test1|test2|test3", "test2")
    GUISetState(@SW_SHOW, $a_info[2])
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd

    [/autoit]


    Laut Anleitung im Internet soll man in der ANYGUI eine kleine Änderung vornehmen damit es für diesen Fall funktioniert.
    Deshalb steht bei mir #include <ANYGUI2.au3>
    Falls die Änderung zum Nachvollziehen wichtig ist:

    Code
    $hWnd = WinGetHandle($wintitle)
     If Not ($controlid = 0) Then $hWnd = ControlGetHandle($wintitle, $wintext, $controlid)

    geändert zu:

    Code
    If @NumParams = 4 Then 
            $hWnd = ControlGetHandle($wintitle, $wintext, $controlid)
        Else
            $hWnd = WinGetHandle($wintitle)
    EndIf


    Bei der Syntax-Prüfung (strg+F5) werden mir keine Fehler angezeigt. Aber sobald ich das Script ausführe krieg ich ne Fehlermeldung in der Console

    Code
    >Running:(3.3.6.1):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\Lottich\Desktop\AutoIt v3 Script (neu) (4).au3"    
    could not get hwnd
    invalid or nonexisting target hwnd
    C:\Users\Lottich\Desktop\AutoIt v3 Script (neu) (4).au3 (8) : ==> Subscript used with non-Array variable.:
    GUICtrlSetData($a_info[0], "test1|test2|test3", "test2")
    GUICtrlSetData($a_info^ ERROR
    ->15:53:42 AutoIT3.exe ended.rc:1
    >Exit code: 1    Time: 3.164


    Nach dieser Consolenmeldung hab ich in der ANYGUI.au3 nachgesehen:

    Spoiler anzeigen
    [autoit]

    Func _GuiTarget($wintitle, $mode = 0, $wintext = 0, $controlid = 0)
    Local $hWnd
    WinWait($wintitle)
    If @NumParams = 4 Then
    $hWnd = ControlGetHandle($wintitle, $wintext, $controlid)
    Else
    $hWnd = WinGetHandle($wintitle)
    EndIf
    If Not ($controlid = 0) Then
    Select
    Case IsArray($controlid)
    $ctlhwnd = DllCall("user32.dll", "hwnd", "ChildWindowFromPoint", "hwnd", $hWnd, "int", $controlid[0], "int", $controlid[1])
    If IsHWnd($ctlhwnd[0]) And $ctlhwnd[0] <> 0x00000000 And $ctlhwnd[0] <> $hWnd Then;checks for valid control hwnd
    $ID = DllCall("User32.dll", "int", "GetDlgCtrlID", "hwnd", $ctlhwnd[0])
    ConsoleWrite("ControlId = " & $ID[0] & @CRLF)
    $hWnd = $ctlhwnd[0]
    Else
    ConsoleWrite("invalid coordinates" & "(" & $controlid[0] & " ," & $controlid[1] & ")" & @CRLF)
    Exit
    EndIf
    Case Else
    $hWnd = ControlGetHandle($wintitle, $wintext, $controlid)
    EndSelect
    EndIf
    If Not IsHWnd($hWnd) Then SetError(1)
    Select
    Case @error = 1
    ConsoleWrite("could not get hwnd" & @CRLF)
    _EndTarget()
    Return 0
    Case $mode = 1
    Global $TargethWnd = $hWnd
    Return $TargethWnd
    Case Else
    Local $LocTargethWnd = $hWnd
    Return $LocTargethWnd
    EndSelect
    EndFunc ;==>_GuiTarget

    [/autoit]


    Das ist hier extrem eingemachtes und ich steig nicht wirklich durch... fakt ist, dass $hWnd nicht gefunden wird weil nicht existent/ungültig.
    Deshalb hab ich versucht, mittels AutoIt Window Info, die richtige ControlID zu finden, aber das funzt alles nicht...