Taskbar Eigenschaften

    • Offizieller Beitrag

    Hi,
    ich war zwar der Meinung, ich hätte diese Funktion schon mal erstellt - aber ich konnte es nicht mehr finden. ;)
    Also somit (evtl. zum zweiten mal) will ich euch nicht davon verschonen. :D
    Mit der Funktion lassen sich Maße und Position der Taskleiste ermitteln.


    EDIT 2021-01-21

    Ich habe mir die Funktion nochmals vorgesucht und die damaligen Fehler in der 2.ten Version korrigiert. Die Werte für die Anordnung sind jetzt auch konform mit Windows (im Uhrzeigersinn: 0=links, 1=oben, 2=rechts, 3=unten). Alles andere erklärt sich selbst.


    Die alten Versionen belasse ich aber mal im Post.

    _GetTaskBarProps (veraltet)
    [autoit]

    ConsoleWrite("TOP" & @TAB & _GetTaskBarProps('top') & @CRLF)
    ConsoleWrite("LEFT" & @TAB & _GetTaskBarProps('left') & @CRLF)
    ConsoleWrite("HEIGHT" & @TAB & _GetTaskBarProps('height') & @CRLF)
    ConsoleWrite("WIDTH" & @TAB & _GetTaskBarProps('width') & @CRLF)
    ConsoleWrite("ALIGN" & @TAB & _GetTaskBarProps('align') & @CRLF & @CRLF)
    $aProps = _GetTaskBarProps()
    ConsoleWrite("LEFT" & @TAB & $aProps[0] & @CRLF)
    ConsoleWrite("TOP" & @TAB & $aProps[1] & @CRLF)
    ConsoleWrite("RIGHT" & @TAB & $aProps[2] & @CRLF)
    ConsoleWrite("BOTTOM" & @TAB & $aProps[3] & @CRLF)

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

    ;===============================================================================
    ; Function Name: _GetTaskBarProps($hProperty="")
    ; Description:: Ermittelt Taskbareigenschaften
    ; Parameter(s): $hProperty Eigenschaft, die zurückgegeben werden soll
    ; "" (Standard) gibt Rectanglposition als Array zurück [left,top,right,bottom]
    ; "TOP" - X1 obere Position
    ; "LEFT" - Y1 linke Position
    ; "HEIGHT" - Y2-Y1 Höhe der Taskleiste
    ; "WIDTH" - X2-X1 Breite der Taskleiste
    ; "ALIGN" - Anordnung: 1=links, 2=rechts, 3=oben, 4=unten
    ; Return Value(s): s. $hProperty
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GetTaskBarProps($hProperty="")
    Local $tRect = DllStructCreate("long;long;long;long"), $hWnd, $ret
    $hProperty = StringUpper(StringStripWS($hProperty, 3))
    $ret = DllCall("user32.dll", 'long', "FindWindowA", 'str', "Shell_traywnd", 'str', "")
    $hWnd = $ret[0]
    DllCall("User32.dll", "int", "GetWindowRect", "hwnd", $hWnd, "ptr", DllStructGetPtr($tRect))
    Local $left = DllStructGetData($tRect, 1)
    Local $top = DllStructGetData($tRect, 2)
    Local $right = DllStructGetData($tRect, 3)
    Local $bottom = DllStructGetData($tRect, 4)
    If $hProperty = "" Then
    Local $aOut[4] = [$left, $top, $right, $bottom]
    Return $aOut
    EndIf
    Switch $hProperty
    Case "TOP"
    Return $top
    Case "LEFT"
    Return $left
    Case "HEIGHT"
    Return $bottom - $top
    Case "WIDTH"
    Return $right - $left
    Case "ALIGN"
    If $top < 1 Then
    If $left < 1 Then
    If $bottom > $right Then Return 1
    If $right > $bottom Then Return 3
    EndIf
    EndIf
    If $top < 1 Then
    If $left > 0 Then Return 2
    EndIf
    If $left < 1 Then
    If $top > 0 Then Return 4
    EndIf
    EndSwitch
    EndFunc ;==>_GetTaskBarProps

    [/autoit]
    _GetTaskBarProps2 (veraltet)
    [autoit]


    ConsoleWrite(_GetTaskBarProps2() & @CRLF)

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

    ; gibt Eigenschaft(en) und Position der Taskbar zurück
    Func _GetTaskBarProps2()
    Global Const $ABM_NEW = 0x0
    Global Const $ABM_REMOVE = 0x1
    Global Const $ABM_QUERYPOS = 0x2
    Global Const $ABM_SETPOS = 0x3
    Global Const $ABM_GETSTATE = 0x4
    Global Const $ABM_GETTASKBARPOS = 0x5
    Global Const $ABM_ACTIVATE = 0x6
    Global Const $ABM_GETAUTOHIDEBAR = 0x7
    Global Const $ABM_SETAUTOHIDEBAR = 0x8
    Global Const $ABM_WINDOWPOSCHANGED = 0x9

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

    Global Const $ABN_STATECHANGE = 0x0
    Global Const $ABN_POSCHANGED = 0x1
    Global Const $ABN_FULLSCREENAPP = 0x2
    Global Const $ABN_WINDOWARRANGE = 0x3

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

    Global Const $ABS_AUTOHIDE = 0x1
    Global Const $ABS_ALWAYSONTOP = 0x2

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

    Global Const $ABE_LEFT = 0
    Global Const $ABE_TOP = 1
    Global Const $ABE_RIGHT = 2
    Global Const $ABE_BOTTOM = 3

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

    Local $hWndAppBar, $msg = '', $ret
    Local $tRECT = DllStructCreate('long;long;long;long')
    Local $tAPPBARDATA = DllStructCreate( _
    'long cbSize;' & _
    'hwnd hWnd;' & _
    'long uCallbackMessage;' & _
    'long uEdge;' & _
    'ptr ' & DllStructGetPtr($tRECT) & ';' & _
    'long lParam')
    DllStructSetData($tAPPBARDATA, 'cbSize', DllStructGetSize($tAPPBARDATA))
    $ret = DllCall("shell32", 'long', 'SHAppBarMessage', 'long', $ABM_GETSTATE, 'ptr', DllStructGetPtr($tAPPBARDATA))
    $state = $ret[0]
    Switch $state
    Case False
    $msg &= "Auto Hide= False, Always on Top = False." & @CRLF
    Case $ABS_ALWAYSONTOP
    $msg &= "Always on Top = True." & @CRLF
    Case Else
    $msg &= "Auto Hide = True." & @CRLF
    EndSwitch
    For $position = $ABE_LEFT To $ABE_BOTTOM
    DllStructSetData($tAPPBARDATA, 'uEdge', $position)
    $ret = DllCall("shell32", 'long', 'SHAppBarMessage', 'long', $ABM_GETAUTOHIDEBAR, 'ptr', DllStructGetPtr($tAPPBARDATA))
    $hWndAppBar = $ret[0]
    If $hWndAppBar > 0 Then
    Switch $position
    Case $ABE_LEFT
    $msg &= "LEFT "
    Case $ABE_TOP
    $msg &= "TOP "
    Case $ABE_RIGHT
    $msg &= "RIGHT "
    Case $ABE_BOTTOM
    $msg &= "BOTTOM "
    EndSwitch
    EndIf
    Next
    Return $msg
    EndFunc ;==>_GetTaskBarProps2()

    [/autoit]
  • Hallo BugFix,

    gute Funktion, kann ich sicher einmal gebrauchen. :thumbup: In deinem Skript ist mir aufgefallen, dass man die TaskBar nicht nur unten anordnen kann:

    Code
    "ALIGN"  - Anordnung: 1=links, 2=rechts, 3=oben, 4=unten

    Wo kann ich das verstellen (Win XP SP3)?

    mfg (Auto)Bert

    • Offizieller Beitrag

    BugFix, Deine erste Funktion funktioniert einwandfrei, aber bei der Zweiten erhalte ich nur "Always on Top = True." und eine Leerzeile als Ausgabe.

    Und ich hatte mir mal ein anderes Script archiviert (AFAIR war das auch von Dir). Habe das jetzt mal als Funktion umgeschrieben:

    [autoit]


    #include <Array.au3>
    $aOut = _GetTaskbarProp()
    _ArrayDisplay($aOut) ; Array mit: Left, Top, Width, Height

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

    Func _GetTaskbarProp()
    Local $iOpt, $aPos
    $iOpt = Opt("WinTitleMatchMode", 4)
    $aPos = WinGetPos("classname=Shell_TrayWnd")
    Opt("WinTitleMatchMode", $iOpt)
    Return $aPos
    EndFunc

    [/autoit]