GUI soll Fenster nicht verdecken

  • Hallo liebe Scripter :)

    ich möchte ein Programm schreiben, welches ähnlich wie eine Taskleiste arbeitet, allerdings an der rechten Seite ausgerichtet wird. Bisher habe ich das auch mehr oder weniger geschafft:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    GUICreate("Titel", @DesktopWidth*0.2, @DesktopHeight, @DesktopWidth-(@DesktopWidth*0.2), Default, $WS_POPUPWINDOW, $WS_EX_TOPMOST)
    GUISetState(@SW_SHOW)
    While 1
    WEnd

    [/autoit]

    Die Leiste ist immer im Vordergrund und kann nicht minimiert/maximiert werden (soll so). Das Problem: Wenn ich nun beispielsweise ein Fenster maximiert geöffnet habe, und gleichzeitig das Programm läuft, wird logischerweise ein Teil des Fensters überdeckt. Wie kann ich bewirken, dass der Bildschirm sozusagen eingeschränkt wird und Fenster dort nicht drunter geschoben werden können?

    Um das ganze mal zu veranschaulichen:
    So sieht der Desktop normalerweise aus
    So sieht der Desktop mit dem Programm derzeit aus
    So soll der Desktop mit dem Programm aussehen

    Ich habe über Google und Co leider nur Methoden zum Verändern der Bildschirmauflösung gefunden. Vielleicht hat jemand von euch ja eine Idee :) Vielen Dank im Voraus

  • Also bei dem Fenster hätte ich ja ne idee aber mit der Taskleiste gestaltet sich dass schwer...


    Ich bin für jeden Denkanstoß dankbar :)

    Edit: Ich habs! Man kann in Windows den Arbeitsbereich des Desktops verändern.

    Spoiler anzeigen
    [autoit]

    ; WinUser.h
    Global Const $SPI_SETWORKAREA = 0x002F
    Global Const $SPI_GETWORKAREA = 0x0030

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

    Global Const $SPIF_UPDATEINIFILE = 0x0001
    Global Const $SPIF_SENDWININICHANGE = 0x0002
    Global Const $SPIF_SENDCHANGE = $SPIF_SENDWININICHANGE

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

    _SetWorkArea(0,0,800,600)
    While 1
    WEnd

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

    Func _SetWorkArea ($iLeft = -1, $iTop = -1, $iRight = -1, $iBottom = -1)
    Local $aResult, $rect = DllStructCreate ("int[4]"), $pRect = DllStructGetPtr ($rect)

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

    ; Change -1's
    If $iLeft = -1 Then $iLeft = 0
    If $iTop = -1 Then $iTop = 0
    If $iRight = -1 Then $iRight = @DesktopWidth + 0
    If $iBottom = -1 Then $iBottom = @DesktopHeight + 0

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

    ; Set struct data
    DllStructSetData ($rect, 1, $iLeft , 1) ;left
    DllStructSetData ($rect, 1, $iTop , 2) ;top
    DllStructSetData ($rect, 1, $iRight , 3) ;right
    DllStructSetData ($rect, 1, $iBottom, 4) ;bottom

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

    ; Set the area
    $aResult = DllCall("user32.dll", _
    "int", "SystemParametersInfo", _
    "int", $SPI_SETWORKAREA, _
    "int", 0, _
    "ptr", $pRect, _
    "int", $SPIF_SENDCHANGE)

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

    If @error Then Return SetError(@error, 0, False)
    Return $aResult[0] <> 0
    EndFunc ; ==> _SetWorkArea

    [/autoit]

    2 Mal editiert, zuletzt von Longibotti (18. August 2013 um 16:11)