Nicht sichtbare GUI

  • Hallo zusammen,

    Hab da mal wieder was.

    Und zwar möchte ich ein PNG Bild anzeigen aber ohne ein sichtbare GUI, also wirklich nur das reine Bild. Nur irgendwie bekomme ich das nicht hin. Bekomme die GUI nicht transparent.

    Hier mal mein Stand im Mom der nicht funktioniert:

    [autoit]

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

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

    Global $hGUI, $hImage, $hGraphic

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

    $x = x()
    $y = y()

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

    $hGUI = GUICreate("fk", $x, $y, (@DesktopWidth / 2) - 132, (@DesktopHeight / 2) - 132, $WS_POPUP, $WS_EX_TRANSPARENT)

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

    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile("c:\fk.png")
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

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

    GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

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

    GUISetState(@SW_SHOW)

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

    While 1

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

    HotKeySet("^!x", "MeinExit")

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

    $msg2 = GUIGetMsg()

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

    Select
    Case $msg2 = $gui_event_close
    Exit
    EndSelect
    WEnd

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

    ; Ressourcen aufräumen
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

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

    ; PNG Bild zeichnen
    Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_PAINT

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

    Func x()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $x = _GDIPlus_ImageGetWidth($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $x
    EndFunc ;==>x

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

    Func y()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $y = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $y
    EndFunc ;==>y

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

    Func MeinExit()
    Exit
    EndFunc

    [/autoit]

    Alles ein wenig zusammen gewürfelt :-(.

    Bild wird angezeigt nur ist halt die GUI nicht transparent. Hab dann mal das hier von BugFix gefunden, komme damit aber definitiv nicht klar.

    Kann mir da einer helfen?

    Einmal editiert, zuletzt von MrB (24. März 2010 um 19:53)

    • Offizieller Beitrag

    Häng mal bitte das Bild an.

  • Hallo MrB,

    habe dein Skript mit einem Bild von mir getestet. 2 kleine Ändernugen waren nötig:

    Spoiler anzeigen
    [autoit]

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

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

    Global $hGUI, $hImage, $hGraphic, $path = "C:\Dokumente und Einstellungen\Bert\Eigene Dateien\Beetle7.png"

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

    $x = x()
    $y = y()

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

    $hGUI = GUICreate("fk", $x, $y, (@DesktopWidth / 2) - 132, (@DesktopHeight / 2) - 132, $WS_POPUP, $WS_EX_TRANSPARENT)

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

    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

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

    GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

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

    GUISetState(@SW_SHOW)

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

    While 1

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

    HotKeySet("^!x", "MeinExit")

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

    $msg2 = GUIGetMsg()

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

    Select
    Case $msg2 = $gui_event_close
    Exit
    EndSelect
    WEnd

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

    ; Ressourcen aufräumen
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

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

    ; PNG Bild zeichnen
    Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_PAINT

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

    Func x()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $x = _GDIPlus_ImageGetWidth($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $x
    EndFunc ;==>x

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

    Func y()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $y = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $y
    EndFunc ;==>y

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

    Func MeinExit()
    Exit
    EndFunc

    [/autoit]

    mfg (Auto)Bert

  • autoit.de/wcf/attachment/8333/

    Erstmal THX an alle'!

    Raupi

    Bild ist oben ^^

    autoBert

    Außer mit der Var $path, hab ich keine Änderung gefunden (Seh wahrscheinlich nix mehr :) ). Mit deinem Script hab ich aber auch das Problem das der Hintergrund (GUI) weiß ist.

    oetzn
    Werd ich machen

    So, hab ich mir angesehen und funktioniert auch nicht. Geht das nicht nur mit .jpg. Mein hätte ich mal irgendwo gelesen

  • Hallo MrB,

    dann teste einmal dies:

    Spoiler anzeigen
    [autoit]

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

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

    Global $hGUI, $hImage, $hGraphic, $path = @ScriptDir & "\ball.png"

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

    $x = x()
    $y = y()

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

    $hGUI = GUICreate("fk", $x, $y, (@DesktopWidth / 2) - 132, (@DesktopHeight / 2) - 132, $WS_POPUP, $WS_EX_TRANSPARENT)
    WinSetTrans($hGUI,"",170)
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

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

    GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

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

    GUISetState(@SW_SHOW)

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

    While 1

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

    HotKeySet("^!x", "MeinExit")

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

    $msg2 = GUIGetMsg()

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

    Select
    Case $msg2 = $gui_event_close
    Exit
    EndSelect
    WEnd

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

    ; Ressourcen aufräumen
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

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

    ; PNG Bild zeichnen
    Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_PAINT

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

    Func x()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $x = _GDIPlus_ImageGetWidth($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $x
    EndFunc ;==>x

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

    Func y()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $y = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $y
    EndFunc ;==>y

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

    Func MeinExit()
    Exit
    EndFunc

    [/autoit]

    Ergebnis: autoit.de/wcf/attachment/8349/

    mfg (Auto)Bert

  • Hmm immer noch nicht das was ich meine. Normalerweise ist der Bereich um den Ball nicht sichtbar (im png als transparent). Nur wie man sieht ist da noch ein Rechtecke zu sehen und genau das soll weg und zwar so das nur der Ball zu sehen ist und sonst nichts.

    • Offizieller Beitrag

    Muß es denn eine PNG Datei sein? Mit GIF Dateien ist das viel einfacher.

  • [autoit]

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

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

    $MainGUI = GUICreate("Transparent", 340, 340, -1, -1, $WS_POPUP,$WS_EX_LAYERED)
    GUISetBkColor(0x000000)
    $baseketball = GUICtrlCreatePic("", 0, 0, 340, 340)
    _SetImage($baseketball, @ScriptDir&"\ball.png")
    GUISetState(@SW_SHOW)

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

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

    [/autoit]
  • Raupi

    Nein natürlich nicht, grrr. hätte ich auch sagen können. Hatte das Bild halt als png da, sry.

    Greek

    Jetzt ist das weiße Viereck (GUI) schwarz. Muss ich irgendeine spezielle Version von irgendwas haben ? Gut ausgedrückt, nicht wahr.

    • Offizieller Beitrag

    Hier hast du mal das Beispiel mit einer GIF Datei:

    Spoiler anzeigen
    [autoit]

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

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

    Global $hGUI, $pic, $path = @ScriptDir & "\ball.gif"

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

    $x = x()
    $y = y()

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

    $hGUI = GUICreate("fk", $x, $y, (@DesktopWidth / 2) - 132, (@DesktopHeight / 2) - 132)
    $pic = GUICreate("", $x, $y, 1, 1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hGUI)
    GUICtrlCreatePic($path, 0, 0, $x, $y)
    WinSetTrans($hGUI, "", 0)

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

    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_SHOW, $hGUI)

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

    While 1

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

    HotKeySet("^!x", "MeinExit")

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

    $msg2 = GUIGetMsg()

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

    Select
    Case $msg2 = $gui_event_close
    Exit
    EndSelect
    WEnd

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

    Func x()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $x = _GDIPlus_ImageGetWidth($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $x
    EndFunc ;==>x

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

    Func y()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $y = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $y
    EndFunc ;==>y

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

    Func MeinExit()
    Exit
    EndFunc ;==>MeinExit

    [/autoit]
  • Greek

    Jetzt ist das weiße Viereck (GUI) schwarz. Muss ich irgendeine spezielle Version von irgendwas haben ? Gut ausgedrückt, nicht wahr.

    Bei mir wirds richtig dargestellt, die Icons.au3 haste ja runtergeladen?

    Mh, wenn du bei dir noch nen schwarzes GUI hast probiers mal so:

    [autoit]

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

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

    $MainGUI = GUICreate("Transparent", 340, 340, -1, -1, $WS_POPUP,$WS_EX_LAYERED)
    GUISetBkColor(0x000000)
    $baseketball = GUICtrlCreatePic("", 0, 0, 340, 340)
    _SetImage($baseketball, @ScriptDir&"\ball.png")
    _WinAPI_SetLayeredWindowAttributes($MainGUI,0x000000,255)
    GUISetState(@SW_SHOW)

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

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

    [/autoit]
    • Offizieller Beitrag

    autoBert.
    Dein Beispiel funzt nicht auf WINDOWS 7 Ultimate 64 bit, das Bild hat einen weißen Hintergrund.

    Greek
    Beim 1. Beispiel ist der Hintergrund schwarz.
    Beim 2. Beispiel funzt es einwandfrei.

  • Raupi

    Funktioniert einwandfrei. Dickes Danke !!!!!

    Natürlich auch an alle anderen!

    Wenn mir jetzt noch einer sagt, wie ich es hinbekomme das das Bild immer im Vordergrund ist, seit ihr mich los ^^. Bin da im Moment dran, nur das Ding haut immer ab wenn ich irgend ein anderes Fenster aktiviere und es soll immer, egal was passiert, im Vordergrund sein.

    P.S.: Vergesst es, Wie ich auf senden geklickt, kam ich von selber drauf:

    [autoit]

    WinSetOnTop("fk", "", 1)

    [/autoit]

    Aber schon das nächste. wie bekomme ich das Fenster komplett deaktiviert ? Mit

    [autoit]

    GUISetState(@SW_DISABLE, $hGUI)
    GUISetState(@SW_LOCK, $hGUI)

    [/autoit]

    Ist es nicht komplett deaktiviert.

    Einmal editiert, zuletzt von MrB (22. März 2010 um 21:44)

    • Offizieller Beitrag

    Dazu gibt es doch WinSetOnTop .

    [autoit]

    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_DISABLE, $hGUI)
    WinSetOntop($hGUI,"",1)

    [/autoit]
  • Raupi

    Du meinst für den Vordergrund oder?

    [autoit]

    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_DISABLE, $hGUI)
    WinSetOntop($hGUI,"",1)

    [/autoit]

    Damit ist die GUI aber nicht komplett deaktiviert. Wenn ich mit der Maus drüber gehe und klicke usw.

    Einmal editiert, zuletzt von MrB (22. März 2010 um 22:37)

    • Offizieller Beitrag

    So klappt es:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    Global $hGUI, $pic, $path = @ScriptDir & "\ball.gif"

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

    $x = x()
    $y = y()

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

    $hGUI = GUICreate("fk", $x, $y, (@DesktopWidth / 2) - 132, (@DesktopHeight / 2) - 132,$WS_DISABLED)
    $pic = GUICreate("", $x, $y, 1, 1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD,$WS_DISABLED), $hGUI)
    $picture= GUICtrlCreatePic($path, 0, 0, $x, $y,$SS_RIGHT)
    WinSetTrans($hGUI, "", 0)

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

    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_DISABLE, $hGUI)
    WinSetOntop($pic,"",1)
    _WinAPI_SetWindowLong($pic,0xFFFFFFEC,BitOR(_WinAPI_GetWindowLong($pic,0xFFFFFFEC),0x00000020))

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

    While 1

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

    HotKeySet("^!x", "MeinExit")

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

    $msg2 = GUIGetMsg()

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

    Select
    Case $msg2 = $gui_event_close
    Exit
    EndSelect
    WEnd

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

    Func x()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $x = _GDIPlus_ImageGetWidth($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $x
    EndFunc ;==>x

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

    Func y()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($path)
    $y = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $y
    EndFunc ;==>y

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

    Func MeinExit()
    Exit
    EndFunc ;==>MeinExit

    [/autoit]