Disco auf dem Desktop

  • Wenn ihr ordentlich Disco wollt, macht das hier ;)
    ( ESC beenden )

    Spoiler anzeigen
    [autoit]

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

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

    $dll = DllOpen("user32.dll")

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

    Global $ballpos1=@DesktopWidth/2
    Global $ballpos2=@DesktopHeight/2
    Global $BewegungSenkrecht=Random(5, 7, 1)
    Global $BewegungWagrecht=Random(5, 7, 1)
    Global $Speed=10

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

    _GDIPlus_Startup()

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

    Global $hGui = GUICreate("Rahmen", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    GUISetBkColor(0xABCDEF)
    _WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255)
    GUISetState()
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $Pinsel = _GDIPlus_PenCreate(0xFF0000FF, 20)
    Global $vanish = _GDIPlus_PenCreate(0xFF000000, 20)
    $t1 = _Timer_SetTimer(0, 20, "move")
    $begin=TimerInit()

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

    AdlibRegister( "_check", 50 )

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

    While 1
    $nmsg=GUIGetMsg()
    Switch $nmsg
    Case $gui_event_close
    Exit
    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_GraphicsClear ( $hGraphic, 0xFFABCDEF )
    _GDIPlus_PenDispose($Pinsel)
    _GDIPlus_PenDispose($vanish)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_ende

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

    Func move($a, $b, $c, $d)
    _GDIPlus_GraphicsDrawArc ( $hGraphic, $ballpos1, $ballpos2, 70, 70, 180, 360, $vanish )
    $ballpos1+=$BewegungWagrecht * $Speed
    $ballpos2+=$BewegungSenkrecht * $Speed
    _GDIPlus_GraphicsDrawArc ( $hGraphic, $ballpos1, $ballpos2, 70, 70, 180, 360, $Pinsel )
    If $ballpos1 >= @DesktopWidth - 80 And $BewegungWagrecht > 0 Then $BewegungWagrecht = Random(-7, -5, 1)
    If $ballpos1 < 10 And $BewegungWagrecht < 0 Then $BewegungWagrecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 95 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    If _GDIPlus_PenGetColor ( $vanish )=0xFF000000 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFFFFFF00 )
    ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFFFFFF00 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFFFF0000 )
    ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFFFF0000 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFF00FF00 )
    ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFF00FF00 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFF000000 )
    EndIf
    $dif=TimerDiff( $begin )
    If $dif>12000 Then
    _GDIPlus_GraphicsClear ( $hGraphic, 0xFFABCDEF )
    $begin=TimerInit()
    EndIf
    EndFunc ;==>move

    [/autoit]

    Hat fast keine CPU Auslastung! Könnt ihr den ganzen Tag anlassen wenn ihr es Aushaltet ;)

    Einmal editiert, zuletzt von Greek (18. Januar 2010 um 21:41)

  • Toll, gefällt mir!
    Edit:/ so wirds noch besser:

    [autoit]

    Global $hGui = GUICreate("Rahmen", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP + $WS_EX_TOPMOST , $WS_EX_LAYERED + $WS_EX_TRANSPARENT)
    WinSetOnTop ("Rahmen", "", 1)

    [/autoit]


    So kann man derweil weiterarbeiten (wenn mans schafft :D )und es bleibt on Top!
    Edit2:/ Auserdem ham ich Zeile 58-61 auskommentiert - Jetzt verschwindet es nicht mehr ständig!
    Edit3:/ Hab die Lösch-Func jetzt mit Hotkey versehen - Jetzt passt es mir!

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

    3 Mal editiert, zuletzt von tobi_girst (19. März 2009 um 21:59)

  • Das Fenster am besten noch auf $WS_EX_TRANPARENT stellen ;)

    [autoit]

    Global $hGui = GUICreate("Rahmen", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOPMOST,$WS_EX_TRANSPARENT,$WS_EX_TOOLWINDOW))
    GUISetBkColor(0xABCDEF)

    [/autoit]


    un WinSetOnTop ist nicht nötig.

  • Das war eigentlich extra so, damit es nicht zu sehr stört ^^


    Glaub ich dir! (siehe Pic, wo ich probiert ha, autoit.de zu lesen!) :D

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • ^^

    Ich kann da noch viel mehr mitmachen =)

    Guck mal hier als Strich:

    Spoiler anzeigen
    [autoit]

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

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

    HotKeySet("{ESC}", "_ende")

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

    Global $ballpos1=@DesktopWidth/2
    Global $ballpos2=@DesktopHeight/2
    Global $BewegungSenkrecht=Random(5, 7, 1)
    Global $BewegungWagrecht=Random(5, 7, 1)
    Global $Speed=10

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

    _GDIPlus_Startup()

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

    Global $hGui = GUICreate("Rahmen", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    GUISetBkColor(0xABCDEF)
    _WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255)
    GUISetState()
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $Pinsel = _GDIPlus_PenCreate(0xFF0000FF, 20)
    Global $vanish = _GDIPlus_PenCreate(0xFF000000, 20)
    $t1 = _Timer_SetTimer(0, 300, "move")
    $begin=TimerInit()

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

    While 1
    Sleep(40)
    WEnd
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_BrushDispose($Pinsel)
    _GDIPlus_BrushDispose($vanish)

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_ende

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

    Func move($a, $b, $c, $d)
    _GDIPlus_GraphicsDrawLine ( $hGraphic, $ballpos1, $ballpos2, $ballpos1+50, $ballpos2+50, $vanish )
    $ballpos1+=$BewegungWagrecht * $Speed
    $ballpos2+=$BewegungSenkrecht * $Speed
    _GDIPlus_GraphicsDrawLine ( $hGraphic, $ballpos1, $ballpos2, $ballpos1+50, $ballpos2+50, $Pinsel )
    If $ballpos1 >= @DesktopWidth - 80 And $BewegungWagrecht > 0 Then $BewegungWagrecht = Random(-7, -5, 1)
    If $ballpos1 < 10 And $BewegungWagrecht < 0 Then $BewegungWagrecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 95 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    If _GDIPlus_PenGetColor ( $vanish )=0xFF000000 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFFFFFF00 )
    ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFFFFFF00 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFFFF0000 )
    ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFFFF0000 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFF00FF00 )
    ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFF00FF00 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFF000000 )
    EndIf
    $dif=TimerDiff( $begin )
    If $dif>12000 Then
    _GDIPlus_GraphicsClear ( $hGraphic, 0xFFABCDEF )
    $begin=TimerInit()
    EndIf
    EndFunc ;==>move

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

    Func _WinAPI_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $dwFlages = 0x03, $isColorRef = False)
    ; progandy
    If $dwFlages = Default Or $dwFlages = "" Or $dwFlages < 0 Then $dwFlages = 0x03
    If Not $isColorRef Then
    $i_transcolor = Hex(String($i_transcolor), 6)
    $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $dwFlages)
    Select
    Case @error
    Return SetError(@error, 0, 0)
    Case $Ret[0] = 0
    Return SetError(4, _WinAPI_GetLastError(), 0)
    Case Else
    Return 1
    EndSelect
    EndFunc ;==>_WinAPI_SetLayeredWindowAttributes

    [/autoit]
  • ^^
    Mal gucken was mir noch sau einfällt bin nicht so Ideenreich :D

    Übrigens mit $t1 = _Timer_SetTimer(0, 10, "move") ist es um einiges Schnell ;)

    Edit: Mit 10 lässt er sich komischerweise nicht mehr mit esc schließen, aber mit 12 klappt es wieder 1 a

    Einmal editiert, zuletzt von Greek (20. März 2009 um 15:45)

  • So isses brutal ^^

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <timers.au3>
    HotKeySet("{ESC}", "_ende")
    Global $ballpos1=@DesktopWidth/2
    Global $ballpos2=@DesktopHeight/2
    Global $BewegungSenkrecht=Random(5, 7, 1)
    Global $BewegungWagrecht=Random(5, 7, 1)
    Global $Speed=10
    _GDIPlus_Startup()
    Global $hGui = GUICreate("Rahmen", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    GUISetBkColor(0xABCDEF)
    _WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255)
    GUISetState()
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $Pinsel = _GDIPlus_PenCreate(0xFF0000FF, 10)
    Global $vanish = _GDIPlus_PenCreate(0xFF000000, 70)
    $t1 = _Timer_SetTimer(0, 10, "move")
    $begin=TimerInit()
    While 1
    Sleep(40)
    WEnd
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_BrushDispose($Pinsel)
    _GDIPlus_BrushDispose($vanish)
    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_ende
    Func move($a, $b, $c, $d)
    _GDIPlus_GraphicsDrawLine ( $hGraphic, $ballpos1, $ballpos2, $ballpos1+50, $ballpos2+50, $vanish )
    $ballpos1+=$BewegungWagrecht * $Speed
    $ballpos2+=$BewegungSenkrecht * $Speed
    _GDIPlus_GraphicsDrawLine ( $hGraphic, $ballpos1, $ballpos2, $ballpos1+50, $ballpos2+50, $Pinsel )
    If $ballpos1 >= @DesktopWidth - 80 And $BewegungWagrecht > 0 Then $BewegungWagrecht = Random(-7, -5, 1)
    If $ballpos1 < 10 And $BewegungWagrecht < 0 Then $BewegungWagrecht = Random(5, 7, 1)
    If $ballpos2 >= @DesktopHeight - 95 And $BewegungSenkrecht > 0 Then $BewegungSenkrecht = Random(-7, -5, 1)
    If $ballpos2 < 30 And $BewegungSenkrecht < 0 Then $BewegungSenkrecht = Random(5, 7, 1)
    If _GDIPlus_PenGetColor ( $vanish )=0xFF000000 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFFFFFF00 )
    ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFFFFFF00 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFFFF0000 )
    ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFFFF0000 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFF00FF00 )
    ElseIf _GDIPlus_PenGetColor ( $vanish )=0xFF00FF00 Then
    _GDIPlus_PenSetColor ( $vanish, 0xFF000000 )
    EndIf
    $dif=TimerDiff( $begin )
    If $dif>12000 Then
    _GDIPlus_GraphicsClear ( $hGraphic, 0xFFABCDEF )
    $begin=TimerInit()
    EndIf
    EndFunc ;==>move

    Func _WinAPI_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $dwFlages = 0x03, $isColorRef = False)
    ; progandy
    If $dwFlages = Default Or $dwFlages = "" Or $dwFlages < 0 Then $dwFlages = 0x03
    If Not $isColorRef Then
    $i_transcolor = Hex(String($i_transcolor), 6)
    $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $dwFlages)
    Select
    Case @error
    Return SetError(@error, 0, 0)
    Case $Ret[0] = 0
    Return SetError(4, _WinAPI_GetLastError(), 0)
    Case Else
    Return 1
    EndSelect
    EndFunc ;==>_WinAPI_SetLayeredWindowAttributes

    [/autoit]
  • Irgendwie erinnert mich das Ding an die Seifenblase von dem Vista/Win 7 Screensaver ^^