Brauche Hilfe bei der Positionierung einer GUI an der Traybar.

  • Hallo,

    ich bekomme es nicht hin, unter Vista (keine Ahnung ob das auf Xp funktioniert) eine GUI, direkt über die Traybar zu positionieren. Es ist leider wenige Pixel zu weit nach unten verschoben. Ich denke mal, dass das an dem Fensterrahmen liegt. Wie bekomme ich die breite der Fensterrahmen heraus?

    [Blockierte Grafik: http://deepsoftware.spacequadrat.de/Downloads/www.AutoIt.de/GUI_Traybar.jpg]

    Ich denke mal so etwas geht mit _WinAPI_GetSystemMetrics? Aber welche Parameter brauche ich dafür?Die "7"?

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Burak Keskin ©

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>

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

    _StreamGUI()

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

    Func _StreamGUI()
    Opt("WinTitleMatchMode", 4)
    Local $TrayPos = WinGetPos("classname=Shell_TrayWnd")
    Opt("WinTitleMatchMode", 1)

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

    Local $ReturnValue
    Local $TestWindow = GUICreate("Audiodatei streamen", 306, 29, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    Local $WinPos = WinGetPos($TestWindow)
    Local $ClientSize = WinGetClientSize($TestWindow)
    GUIDelete()

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

    Global $StreamGUI_Handle = GUICreate("Audiodatei streamen", 306, 29, @DesktopWidth - 306, @DesktopHeight - $TrayPos[3] - 29 - ($WinPos[3] - $ClientSize[1]), -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    WinSetOnTop($StreamGUI_Handle, "", 1)
    GUICtrlCreateLabel("Link:", 8, 8, 27, 17)
    GUICtrlSetTip(-1, 'Geben Sie bitte hier die Adresse zur Audiodatei an. Beispiel: "www.musik.de/sänger/interpret.mp3"' & @CRLF _
    & "Diese Funktion dient dazu, Audiodateien direkt ohne Download abzuspielen (streamen).", "Link", 1, 1)
    Global $StreamGUI_Input = GUICtrlCreateInput(ClipGet(), 40, 4, 225, 19)
    Global $StreamGUI_Button = GUICtrlCreateButton("Ok", 272, 4, 27, 19, $BS_DEFPUSHBUTTON)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $StreamGUI_Handle
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUIDelete($StreamGUI_Handle)
    Return SetError(1, 0, 0)
    Case $StreamGUI_Input
    $ReturnValue = GUICtrlRead($StreamGUI_Input)
    GUIDelete($StreamGUI_Handle)
    Return $ReturnValue
    Case $StreamGUI_Button
    $ReturnValue = GUICtrlRead($StreamGUI_Input)
    GUIDelete($StreamGUI_Handle)
    Return $ReturnValue
    EndSwitch
    EndSwitch
    WEnd
    EndFunc ;==>_StreamGUI

    [/autoit]

    Danke schonmal für die Hilfe :).

  • Du könntest mit der AutoIt Window Info unter Options auf Magnify klicken und abzählen. Bei mir unter Win 7 sinds 10 Pixel.

    • Offizieller Beitrag

    Unter Windows Vista müßte folgende Zeile 38 passen:

    [autoit]

    Global $StreamGUI_Handle = GUICreate("Audiodatei streamen", 306, 29, @DesktopWidth - $WinPos[2] -4, @DesktopHeight - $TrayPos[3] - $WinPos[3] -4, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))

    [/autoit]


    Bei WinXP:

    [autoit]

    Global $StreamGUI_Handle = GUICreate("Audiodatei streamen", 306, 29, @DesktopWidth - $WinPos[2] , @DesktopHeight - $TrayPos[3] - $WinPos[3] , -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))

    [/autoit]
  • Funktioniert das?

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Burak Keskin ©

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>

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

    _StreamGUI()

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

    Func _StreamGUI()

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

    Local $ReturnValue
    Local $TestWindow = GUICreate("Audiodatei streamen", 306, 29, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    Local $WinPos = WinGetPos($TestWindow)
    Local $ClientSize = WinGetClientSize($TestWindow)
    GUIDelete()
    Local $Width = 306, $Height = 29


    #Region Position
    Local Const $SM_CXFIXEDFRAME = _WinAPI_GetSystemMetrics(7)
    Local Const $SM_CYFIXEDFRAME = _WinAPI_GetSystemMetrics(8)
    Local Const $SM_CYSMCAPTION = _WinAPI_GetSystemMetrics(51)

    Local $posX = @DesktopWidth -$Width - 2*$SM_CXFIXEDFRAME
    Local $PosY = @DesktopHeight -$Height - 2*$SM_CYFIXEDFRAME - $SM_CYSMCAPTION
    Local Const $TrayPos = WinGetPos("[CLASS:Shell_TrayWnd]")

    If IsArray($TrayPos) Then
    If $TrayPos[0] <> 0 Then $posX = $TrayPos[0] -$Width - 2*$SM_CXFIXEDFRAME
    If $TrayPos[1] <> 0 Then $posY = $TrayPos[1] -$Height - 2*$SM_CYFIXEDFRAME - $SM_CYSMCAPTION

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

    If $TrayPos[1] = 0 And $TrayPos[0] = 0 Then
    If $TrayPos[2] = @DesktopWidth Then $PosY = $TrayPos[3]
    If $TrayPos[3] = @DesktopHeight Then $PosX = $TrayPos[2]
    EndIf
    EndIf
    #EndRegion Position

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

    Global $StreamGUI_Handle = GUICreate("Audiodatei streamen", $Width, $Height, $posX, $PosY, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    WinSetOnTop($StreamGUI_Handle, "", 1)
    GUICtrlCreateLabel("Link:", 8, 8, 27, 17)
    GUICtrlSetTip(-1, 'Geben Sie bitte hier die Adresse zur Audiodatei an. Beispiel: "www.musik.de/sänger/interpret.mp3"' & @CRLF _
    & "Diese Funktion dient dazu, Audiodateien direkt ohne Download abzuspielen (streamen).", "Link", 1, 1)
    Global $StreamGUI_Input = GUICtrlCreateInput(ClipGet(), 40, 4, 225, 19)
    Global $StreamGUI_Button = GUICtrlCreateButton("Ok", 272, 4, 27, 19, $BS_DEFPUSHBUTTON)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $StreamGUI_Handle
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUIDelete($StreamGUI_Handle)
    Return SetError(1, 0, 0)
    Case $StreamGUI_Input
    $ReturnValue = GUICtrlRead($StreamGUI_Input)
    GUIDelete($StreamGUI_Handle)
    Return $ReturnValue
    Case $StreamGUI_Button
    $ReturnValue = GUICtrlRead($StreamGUI_Input)
    GUIDelete($StreamGUI_Handle)
    Return $ReturnValue
    EndSwitch
    EndSwitch
    WEnd
    EndFunc ;==>_StreamGUI

    [/autoit]
  • Hmm, könnte bei aero etwas anders sein ;) Also teste mal so:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Burak Keskin ©

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>

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

    _StreamGUI()

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

    Func _StreamGUI()

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

    Local $ReturnValue
    Local $TestWindow = GUICreate("Audiodatei streamen", 306, 29, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    Local $WinPos = WinGetPos($TestWindow)
    Local $ClientSize = WinGetClientSize($TestWindow)
    GUIDelete()
    Local $Width = 306, $Height = 29


    #Region Position
    Local Const $SM_CXFIXEDFRAME = _WinAPI_GetSystemMetrics(7)
    Local Const $SM_CYFIXEDFRAME = _WinAPI_GetSystemMetrics(8)
    Local Const $SM_CXFRAME = _WinAPI_GetSystemMetrics(32)
    Local Const $SM_CYFRAME = _WinAPI_GetSystemMetrics(33)
    Local Const $SM_CYSMCAPTION = _WinAPI_GetSystemMetrics(51)

    If _DwmIsCompositionEnabled() Then
    Local $iCalcW = $Width + 2*$SM_CXFRAME
    Local $iCalcH = $Height + 2*$SM_CYFRAME + $SM_CYSMCAPTION
    Else
    Local $iCalcW = $Width + 2*$SM_CXFIXEDFRAME
    Local $iCalcH = $Height + 2*$SM_CYFIXEDFRAME + $SM_CYSMCAPTION
    EndIf

    Local $posX = @DesktopWidth - $iCalcW
    Local $PosY = @DesktopHeight - $iCalcH
    Local Const $TrayPos = WinGetPos("[CLASS:Shell_TrayWnd]")

    If IsArray($TrayPos) Then
    If $TrayPos[0] <> 0 Then $posX = $TrayPos[0] - $iCalcW
    If $TrayPos[1] <> 0 Then $posY = $TrayPos[1] - $iCalcH

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

    If $TrayPos[1] = 0 And $TrayPos[0] = 0 Then
    If $TrayPos[2] = @DesktopWidth Then $PosY = $TrayPos[3]
    If $TrayPos[3] = @DesktopHeight Then $PosX = $TrayPos[2]
    EndIf
    EndIf
    #EndRegion Position

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

    Global $StreamGUI_Handle = GUICreate("Audiodatei streamen", $Width, $Height, $posX, $PosY, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    WinSetOnTop($StreamGUI_Handle, "", 1)
    GUICtrlCreateLabel("Link:", 8, 8, 27, 17)
    GUICtrlSetTip(-1, 'Geben Sie bitte hier die Adresse zur Audiodatei an. Beispiel: "www.musik.de/sänger/interpret.mp3"' & @CRLF _
    & "Diese Funktion dient dazu, Audiodateien direkt ohne Download abzuspielen (streamen).", "Link", 1, 1)
    Global $StreamGUI_Input = GUICtrlCreateInput(ClipGet(), 40, 4, 225, 19)
    Global $StreamGUI_Button = GUICtrlCreateButton("Ok", 272, 4, 27, 19, $BS_DEFPUSHBUTTON)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $StreamGUI_Handle
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUIDelete($StreamGUI_Handle)
    Return SetError(1, 0, 0)
    Case $StreamGUI_Input
    $ReturnValue = GUICtrlRead($StreamGUI_Input)
    GUIDelete($StreamGUI_Handle)
    Return $ReturnValue
    Case $StreamGUI_Button
    $ReturnValue = GUICtrlRead($StreamGUI_Input)
    GUIDelete($StreamGUI_Handle)
    Return $ReturnValue
    EndSwitch
    EndSwitch
    WEnd
    EndFunc ;==>_StreamGUI

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

    Func _DwmIsCompositionEnabled()
    ;Author: Prog@ndy
    Local $aResult = DllCall('dwmapi.dll', 'long', 'DwmIsCompositionEnabled', 'int*', 0)
    If @error Or $aResult[0]<>0 Then Return SetError(1,0,0)
    Return $aResult[1]
    EndFunc

    [/autoit]