Sichtbare Buttons auf Unsichtbarem GUI

  • Hallo ich habe vor ein Info Tool zu schreiben aber quäle mich jetzt schon seit stunden mit dem Versuch das GUI durchsichtig/unsichtbar zu machen aber die Buttons nicht. Also quasi das man das Was hinter dem GUI stattfindet hindurchsehen kann.

    Das GUI soll auf unterster ebene ausgeführt werden also quasi unter allen anderen Fenstern aber über dem Wallpaper vom Desktop.

    Ist das möglich?

    Finde da keine Möglichkeit

  • Also wie soll das jetzt sein? Soll du Gui jetzt durchsichtig sein oder soll das Fenster hinter alle anderen?

    Durchsichtig ist ganz leicht:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 192, 124,$WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOOLWINDOW)
    GUISetBkColor (0xFFFFFF)
    DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $Form1, "long", 0xFFFFFF, "byte", 255, "long",True)
    $Button1 = GUICtrlCreateButton("Button1", 32, 56, 73, 57, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Button2", 152, 232, 249, 105, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("Label1", 192, 64, 36, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    mfg. Jam00

  • Danke für das Durchsichtige GUI!
    Ja es soll hinter allen anderen sein. Also quasi auf dem Desktop aber wenn jemand ein Fenster öffnet soll es ganz hinten sein!
    Und es soll auch nicht nach vorne geholt werden können.

    Es soll quasi so sein dass der Nutzer auf seinem Desktop 2 Buttons hat, diese sollen klickbar sein.
    Aber sie sollen eben auf dem Desktop bleiben und nicht vor den anderen Anwendungen rumschwirren.
    Wenn sie einen Button drücken wollen müssen sie alle anderen Fenster minimieren und dann darauf klicken.

    Ist es möglich den Reiter in der Desktopleiste auszublenden?
    Hat sich erledigt! Ist er ja schon^^

    Einmal editiert, zuletzt von L0c4lh0sT (11. Juni 2009 um 13:32)

  • Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 192, 124, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOOLWINDOW)
    GUISetBkColor(0xFFFFFF)
    DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $Form1, "long", 0xFFFFFF, "byte", 255, "long", True)
    DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $Form1, "hwnd", WinGetHandle("Program Manager"))
    $Button1 = GUICtrlCreateButton("Button1", 32, 56, 73, 57, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Button2", 152, 232, 249, 105, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("Label1", 192, 64, 36, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Geht aber glaub ich nicht bei Vista

    mfg. Jam00

  • Das müsste auf jedenfall gehen:

    Spoiler anzeigen
    [autoit]

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

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

    Global $aButton[5]

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

    $gui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-170, -1, $WS_POPUP)
    $aButton[0] = GUICtrlCreateButton("Button 1", 0, 0, 150)
    $aButton[1] = GUICtrlCreateButton("Button 2", 0, 30, 150)
    $aButton[2] = GUICtrlCreateButton("Button 3", 0, 60, 150)
    $aButton[3] = GUICtrlCreateButton("Button 4", 0, 90, 150)
    $aButton[4] = GUICtrlCreateButton("Exit", 0, 120, 150)
    GUISetState(@SW_SHOW)

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

    $pos = WinGetPos($gui)
    _GuiHole($gui, 0, 0, 150, 150)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $aButton[4]
    ExitLoop
    Case $aButton[0]
    MsgBox(0, '', 'Button1 geklickt')
    Case $aButton[1]
    MsgBox(0, '', 'Button2 geklickt')
    Case $aButton[2]
    MsgBox(0, '', 'Button3 geklickt')
    Case $aButton[3]
    MsgBox(0, '', 'Button4 geklickt')
    EndSwitch
    WEnd

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

    Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
    Local $outer_rgn, $inner_rgn, $combined_rgn
    $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
    _WinAPI_DeleteObject($outer_rgn)
    _WinAPI_DeleteObject($inner_rgn)
    _AddCtrlRegion($combined_rgn, $aButton)
    _WinAPI_SetWindowRgn($h_win, $combined_rgn)
    EndFunc ;==>_GuiHole

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

    Func _AddCtrlRegion($full_rgn, $ctrl_id)
    Local $ctrl_pos, $ctrl_rgn
    If IsArray($ctrl_id) Then
    For $i = 0 To UBound($ctrl_id) -1
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id[$i])
    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
    _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
    _WinAPI_DeleteObject($ctrl_rgn)
    Next
    Else
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
    _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
    _WinAPI_DeleteObject($ctrl_rgn)
    EndIf
    EndFunc ;==>_AddCtrlRegion

    [/autoit]