Maple Desktop

  • So, nun ist es soweit, der neue Maple Desktop ist vollendet.
    Ich schrieb den Source nochmals komplett neu und fügte weitere Features dazu:

    • Zusatzdatein(Bilder,Sound) werden mit in der Exe gespeichert und direkt in den Speicher geladen.
    • Animals können nun auch auf den Controls spazieren gehen
    • Animals können Sounds ausgeben
    • Animals können wieder mit der Maus verschoben werden (Animal anklicken und einfach auf ein anderes Control setzen)
    • Close-All Funktion, -> schließt alle Maple Desktop-Anwendungen sofort
    • Autostart-Funktion
    • Sound On/Off-Switch

    Ich freue mich über Kritik und Lob, schreibt einfach euer Meinung! :D

    Das ganze Projekt habe ich nun an Sirocool abgegeben, da ich einfach mit Schule und C++ beschäftigt bin!
    Ich möchte aber ein Großes Lob an ihn aussprechen, da er sich die Zeit genommen hat, das ganze auf Vordermann zu bringen! :thumbup: Super Homepage-Design!!!

    Homepage-Link

    Grüße Faweyr

    5 Mal editiert, zuletzt von Faweyr (13. Dezember 2011 um 15:18)

  • Danke, kannst du mir sagen welches Windows du benutzt, ob Sound rauskommt und ob die Figur grafische Fehler aufweißt? Wäre nett :thumbup:
    Was meinst du den mit "die option, mit windows zu starten"? :)
    Danke für deine relativ schnelle Antwort :rock:

  • also ich verwende windows 7 32bit und fehler habe ich gar keine.
    sound kann ich nicht sagen, da ich bei der arbeit bin keine boxe habe.

    mit der option meinte ich, dass es cool wäre, wenn man das programm im autostart setzten könnte. also dass das programm mit windows startet :)

    habe den monkey jetzt auch ausprobiert.
    auch hier keine fehler. teste es später dann zu hause mit win7 64bit und sound.

  • Hallo,

    Ich wollte es gerade selber komplimieren, aber leider spuckt Scite einen für mich nicht verständlichen Error aus..

    Error


    C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Maple Desktop (Cat).au3(3,7) : ERROR: syntax error (illegal character)
    Author:
    ~~~~~~^
    C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Maple Desktop (Cat).au3 - 1 error(s), 0 warning(s)
    !>16:31:12 AU3Check ended.rc:2

    Angepasste Version
    [autoit]

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

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

    Author: Faweyr (Johannes Fischer)
    AutoIt Version: 3.0
    Last Update: 18.08.2010
    Language: German/English
    Platform: Windows XP/Vista/7
    Contact: [email='johannes.m.fischer@web.de'][/email]
    Note: Die Nutzungsbedingungen können nachgelesen werden unter: http://www.faweyr.bplaced.de/index.php?go=nutzung

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

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

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

    #AutoIt3Wrapper_Res_Description=Maple Desktop
    #AutoIt3Wrapper_Res_LegalCopyright=Faweyr (Fischer Johannes)

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

    #Region Data---------------------------------------------------------------------------------------------------------------------------------------------
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\angry.0.png, rt_rcdata,angry.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\angry.wav, sound,angry
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\chat.0.png, rt_rcdata,chat.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\chat.1.png, rt_rcdata,chat.1
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\chat.2.png, rt_rcdata,chat.2
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\chat.wav, sound,chat
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\cry.0.png, rt_rcdata,cry.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\cry.1.png, rt_rcdata,cry.1
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\cry.2.png, rt_rcdata,cry.2
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\cry.3.png, rt_rcdata,cry.3
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\cry.wav, sound,cry
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\dung.0.png, rt_rcdata,dung.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\dung.wav, sound,dung
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\fly.0.png, rt_rcdata,fly.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\fly.1.png, rt_rcdata,fly.1
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\jump.0.png, rt_rcdata,jump.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\love.0.png, rt_rcdata,love.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\love.1.png, rt_rcdata,love.1
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\love.2.png, rt_rcdata,love.2
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\love.3.png, rt_rcdata,love.3
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\love.4.png, rt_rcdata,love.4
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\love.5.png, rt_rcdata,love.5
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\move.0.png, rt_rcdata,move.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\move.1.png, rt_rcdata,move.1
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\move.2.png, rt_rcdata,move.2
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\rise.0.png, rt_rcdata,rise.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\rise.wav, sound,rise
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand0.0.png, rt_rcdata,stand0.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand0.1.png, rt_rcdata,stand0.1
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand0.2.png, rt_rcdata,stand0.2
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand1.0.png, rt_rcdata,stand1.0
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand1.1.png, rt_rcdata,stand1.1
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand1.2.png, rt_rcdata,stand1.2
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand1.3.png, rt_rcdata,stand1.3
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand1.4.png, rt_rcdata,stand1.4
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand1.5.png, rt_rcdata,stand1.5
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand1.6.png, rt_rcdata,stand1.6
    #AutoIt3Wrapper_Res_File_Add=C:\Users\Fabian\Desktop\AutoIt\Downloads\Maple Desktop (Cat)\Data\stand1.7.png, rt_rcdata,stand1.7

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

    ;Data:
    #include <Animal-Data.au3>

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

    #Endregion Data
    ;Endregion Data------------------------------------------------------------------------------------------------------------------------------------------

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

    #NoTrayIcon
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <Memory.au3>
    #include <Misc.au3>
    #include <GuiMenu.au3>
    #include <Animal-Data.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    _GDIPlus_Startup()
    Opt("GUIOnEventMode", 1)

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

    Global $aTimer,$aTime,$sTask= GetTaskbar(),$hState,$hView,$hFrame = 1,$hMovement,$nX,$nY,$hJump[1],$hWait[1],$hOpacity = GetOpacity(),$sPos[4],$tMem,$sTimer,$sLMH[5][10],$hGroup,$nHwnd
    Global enum $nInfos,$nVisit = 1000,$nExit,$nAllExit
    Global Const $SND_RESOURCE = 0x00040004,$SND_ASYNC = 1

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

    ;Daten erfassen:
    ;Set Right Bitmaps:
    for $n = 0 to UBound($hBitmap)-1 step 1
    for $m = 1 to $hBitmap[$n][0][0] step 1
    ;Bitmaps:
    $hBitmap[$n][$m][0] = ResourceLoadImage($hBitmap[$n][$m][0])
    $hBitmap[$n][$m][4] = _GDIPlus_ImageGetWidth($hBitmap[$n][$m][0])
    $hBitmap[$n][$m][5] = _GDIPlus_ImageGetHeight($hBitmap[$n][$m][0])
    $sSave = $hBitmap[$n][$m][0]
    $hBitmap[$n][$m][0] = _GDIPlus_BitmapCreateHBITMAPFromBitmap($sSave)
    _GDIplus_ImageRotateFlip($sSave,4)
    $hBitmap[$n][$m][1] = _GDIPlus_BitmapCreateHBITMAPFromBitmap($sSave)
    _GDIPlus_ImageDispose($sSave)
    Next

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

    ;Daten ermitteln:
    ;$sLMH[0][0] = Fallen
    ;$sLMH[1][0] = laufen
    ;$sLMH[2][0] = jumpen
    ;$sLMH[3][0] = warten
    $sLMH[$hBitmap[$n][0][1]][0] += 1
    $sLMH[$hBitmap[$n][0][1]][$sLMH[$hBitmap[$n][0][1]][0]] = $n
    Next

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

    ;Addition von den Auswahlchancen (wird für die Auswahl eines Movements benötigt)
    for $i = 1 to 3 step 1
    for $n = 1 to $sLMH[$i][0] step 1
    $hGroup += $hBitmap[$sLMH[$i][$n]][0][4]
    Next
    Next

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

    ;Create Animal:
    $hWnd = GUICreate($hName, 1,1, Random(100,@desktopwidth-100,1),Random(100,@DesktopHeight-100,1), $WS_POPUP, BitOr( $WS_EX_LAYERED, $WS_EX_TOOLWINDOW,$WS_EX_TOPMOST))
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize )
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha" , $hOpacity )
    DllStructSetData($tBlend, "Format", 1)
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
    GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')

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

    ;Mainloop
    while 1

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

    Sleep(20)
    $sWindow = WinGetPos("[active]")
    $sPos = WinGetPos($hWnd)

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

    ;Animieren:
    If TimerDiff($sTimer) >= $hBitmap[$hMovement][$hFrame][3] Then _RedrawAnimal()

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

    ;Schwerkraft + Collision
    If $sPos[0]+$sPos[2] > $sWindow[0] and $sPos[0] < $sWindow[0]+$sWindow[2] and $sLMH[0][0] <> 0 Then
    $sDistance = $sWindow[1] - ($sPos[1]+$sPos[3])
    ;Collision-Window:
    If $sDistance < 5 and $sDistance > 1 Then
    $sPos[1] += $sDistance ;Anpassungsbewegung
    If $hBitmap[$hMovement][0][1] <> 0 and $hBitmap[$hMovement][0][1] <> 3 then $hState = 0 ;Status für neue Bewegung setzen
    elseif $sDistance < 0 and $sDistance > -10 Then
    $sPos[1] = $sWindow[1]-$sPos[3] ;Anpassungsbewegung
    If $hBitmap[$hMovement][0][1] <> 0 and $hBitmap[$hMovement][0][1] <> 3 then $hState = 0 ;Status für neue Bewegung setzen

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

    elseif $sDistance >= 5 then
    Switch $hBitmap[$hMovement][0][1]
    Case 2 ;Jumpen
    Movement()
    Case 0 ;Fallen
    $sPos[1] += 5
    Case Else ;neue Fall-Sequenz
    $hMovement = $sLMH[0][RandomEx(1,$sLMH[0][0],1)]
    EndSwitch
    Elseif $sDistance < -10 then
    TaskbarCollision()
    Elseif $sLMH[2][0] <> 0 then ;wenn Animal jumpen kann dann am Rand jumpen
    ;Wenn am Rand des Fensters, dann runterspringen!
    If $sPos[0] < $sWindow[0]+20 Then ;links jump
    SetMovement($sLMH[2][RandomEx(1,$sLMH[2][0],1)],@DesktopHeight,0)
    elseif $sPos[0] > $sWindow[0]+$sWindow[2]-20 then ;rechts jump
    SetMovement($sLMH[2][RandomEx(1,$sLMH[2][0],1)],@DesktopHeight,1)
    endif
    Movement()
    endif
    Else
    TaskbarCollision()
    endif

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

    ;Sidecollision:
    If $sPos[0] > @DesktopWidth then $sPos[0] = -$sPos[2]
    If $sPos[0]+$sPos[2] < 0 then $sPos[0] = @DesktopWidth
    If $sPos[1] >= @DesktopHeight then
    $sPos[1] = 0 ;Auserhalb des Screens
    $sPos[0] = RandomEx(0,@DesktopWidth-$sPos[2],1)
    $hState = 0
    endif

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

    ;Bewegen:
    WinMove($hWnd,"",$sPos[0],$sPos[1])
    wend

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

    #Region Animal
    func Movement()
    If $hBitmap[$hMovement][0][1] = 0 then $hState = 0
    If $hState > 0 then
    Switch $hBitmap[$hMovement][0][1]
    Case 3 ;warten
    $hState -= 20 ;ziehe 20ms davon ab, (da Funktion im ca 20ms-Abstand aufgerufen wird!)
    Case 1 ;laufen
    $sPos[0] += _Iif($hView <> 0,$hSpeed,-$hSpeed)
    $hState -= 20
    Case 2 ;jumpen
    $hState -= $hWidth*0.0666
    $nState = Round(@DesktopHeight-$hState)
    $sPos[0] = $nState*_Iif($hView <> 0,1,-1)+$nX
    $sPos[1] = $nY-(-$hHeight/($hWidth*$hWidth)*($nState-$hWidth)^2+$hHeight*2)
    EndSwitch
    Else
    ;Neue Bewegung wählen:
    $hMovement = GetMovement()
    $hFrame = 1

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

    Switch $hBitmap[$hMovement][0][1]
    Case 3 ;warten
    $hState = $hBitmap[$hMovement][0][3]
    Case 1 ;laufen
    $hView = RandomEx(0,1,1)
    $hState = $hBitmap[$hMovement][0][3]
    Case 2 ;jumpen
    $hState = @DesktopHeight
    $hView = RandomEx(0,1,1)
    $nX = $sPos[0]
    $nY = $sPos[1]
    EndSwitch

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

    ;Bild sofort an das neue Bewegungsmuster anpassen:
    _RedrawAnimal()

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

    ;Sound starten:
    If $hBitmap[$hMovement][0][2] <> "" then DllCall("winmm.dll", "int", "PlaySound", "str", $hBitmap[$hMovement][0][2], "hwnd", 0, "int", BitOR($SND_RESOURCE, $SND_ASYNC))

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

    ;Taskbar checken:
    $sTask= GetTaskbar()

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

    ;-> Gleich noch die Durchsichtigkeit an die Uhrzeit anpassen!
    $hOpacity = GetOpacity()
    endif
    EndFunc

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

    func SetMovement($nMovement = $hMovement,$nState = $hState,$nView = $hView)
    $hMovement = $nMovement
    $hState = $nState
    $hView = $nView
    $nX = $sPos[0]
    $nY = $sPos[1]
    ;Bild sofort an das neue Bewegungsmuster anpassen:
    _RedrawAnimal()
    ;Sound starten:
    If $hBitmap[$hMovement][0][2] <> "" then DllCall("winmm.dll", "int", "PlaySound", "str", $hBitmap[$hMovement][0][2], "hwnd", 0, "int", BitOR($SND_RESOURCE, $SND_ASYNC,$SND_LOOP))
    EndFunc

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

    func TaskbarCollision()

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

    $sDistance = $sTask[3] - ($sPos[1]+$sPos[3])
    ;Collision-Taskbar:
    If $sLMH[0][0] <> 0 then
    If $sDistance < 5 and $sDistance > 1 Then
    $sPos[1] += $sDistance ;Anpassungsbewegung
    If $hBitmap[$hMovement][0][1] <> 1 and $hBitmap[$hMovement][0][1] <> 3 then $hState = 0 ;Status für neue Bewegung setzen
    elseif $sDistance < 0 and $sDistance > -10 Then
    $sPos[1] = $sTask[3]-$sPos[3] ;Anpassungsbewegung
    If $hBitmap[$hMovement][0][1] <> 0 and $hBitmap[$hMovement][0][1] <> 3 then $hState = 0 ;Status für neue Bewegung setzen

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

    elseif $sDistance <= -10 or $sDistance >= 5 then
    Switch $hBitmap[$hMovement][0][1]
    Case 2 ;Jumpen
    Movement()
    Case 0 ;Fallen
    $sPos[1] += 5
    Case Else ;neue Fall-Sequenz
    $hMovement = $sLMH[0][RandomEx(1,$sLMH[0][0],1)]
    EndSwitch
    Else
    ;wenn ein Fenster in Reichweite ist, draufspringen!
    If $sWindow[1] > $sPos[1]-$hHeight+10 and $hWnd <> WinGetHandle("") and $sLMH[2][0] <> 0 and $sLMH[1][0] <> 0 then
    If $sPos[0] > $sWindow[0]+100 and $sPos[0] < $sWindow[0]+$sWindow[2]-100 then
    SetMovement($sLMH[2][RandomEx(1,$sLMH[2][0],1)],@DesktopHeight,0)
    Else
    ;Wenn Fenster in gleicher Höhe dann zu ihm laufen!
    ;->Wenn Fenster nicht zu weit weg!
    If $hMovement <> 1 and $sWindow[0] > 0 and $sWindow[0] < @DesktopWidth and $sWindow[2] < @DesktopWidth then SetMovement(1,Abs($sWindow[0] + $sWindow[2]/2 - $sPos[0])/$hSpeed*20,$sWindow[0] + $sWindow[2]/2 > $sPos[0] )
    endif
    endif
    Movement()
    endif

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

    Elseif $sDistance <> 0 then
    $sPos[1] += $sDistance
    Else
    Movement()
    endif
    EndFunc

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

    func ExitCode()
    ;Window-Sachen freigeben
    _WinAPI_ReleaseDC (0,$hScrDC)
    _WinAPI_DeleteDC ($hMemDC)
    GUIDelete($hWnd)
    ;GDI-Sachen freigeben
    for $n = 1 to UBound($hBitmap)-1 step 1
    for $m = 1 to $hBitmap[$n][0][0] step 1
    _WinAPI_DeleteObject($hBitmap[$n][$m][0])
    _WinAPI_DeleteObject($hBitmap[$n][$m][1])
    Next
    Next
    _GDIPlus_Shutdown()
    ;-> Exit
    Exit
    EndFunc

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

    func _RedrawAnimal()
    $sTimer = TimerInit()
    $hOld = $hFrame
    $hFrame = _IIf($hFrame >= $hBitmap[$hMovement][0][0],1,$hFrame+1)
    DllStructSetData($tSize, "Y", $hBitmap[$hMovement][$hFrame][5])
    DllStructSetData($tSize, "X", $hBitmap[$hMovement][$hFrame][4])
    $hSelect = _WinAPI_SelectObject($hMemDC,$hBitmap[$hMovement][$hFrame][$hView])
    _WinAPI_UpdateLayeredWindow($hWnd, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_SelectObject($hMemDC, $hSelect)
    ;Da Bitmaps unterschiedlich groß sind wird die Position angepasst!
    WinMove($hWnd,"", _IIF($hView <> 0,$sPos[0]+$hBitmap[$hMovement][$hOld][4]-$hBitmap[$hMovement][$hOld][2]-($hBitmap[$hMovement][$hFrame][4] -$hBitmap[$hMovement][$hFrame][2]),$sPos[0]+$hBitmap[$hMovement][$hOld][2]-$hBitmap[$hMovement][$hFrame][2]),$sPos[1]+$sPos[3]-$hBitmap[$hMovement][$hFrame][5])
    $sPos = WinGetPos($hWnd)
    EndFunc

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

    Func _GDIplus_ImageRotateFlip($hImage,$RotateFlipType)
    Local $ret = DllCall($ghGDIPDll,"int","GdipImageRotateFlip","hwnd",$hImage,"dword",$RotateFlipType)
    If @error Then Return SetError(1,0,0)
    Return SetError($ret[0],0,$ret[0]=0)
    EndFunc

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

    Func ResourceLoadImage($ResName)
    $hInstance = _WinAPI_GetModuleHandle("")
    $InfoBlock = DllCall("kernel32.dll", "int", "FindResourceExA", "int", $hInstance, "long", 10, "str", $ResName, "short", 0)
    $nSize = DllCall("kernel32.dll", "dword", "SizeofResource", "int", $hInstance, "int", $InfoBlock[0])
    $GlobalMemoryBlock = DllCall("kernel32.dll", "int", "LoadResource", "int", $hInstance, "int", $InfoBlock[0])
    $MemoryPointer = DllCall("kernel32.dll", "int", "LockResource", "int", $GlobalMemoryBlock[0])
    $hData = _MemGlobalAlloc($nSize[0],2)
    $pData = _MemGlobalLock($hData)
    _MemMoveMemory($MemoryPointer[0],$pData,$nSize[0])
    _MemGlobalUnlock($hData)
    $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0)
    $hImage = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream[3], "int*",0)
    $hImage = $hImage[2]
    _WinAPI_DeleteObject($pStream[3])
    _MemGlobalFree($hData)
    return $hImage
    EndFunc

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

    Func GetTaskbar()
    $tRect = DllStructCreate("long;long;long;long")
    $ret = DllCall("user32.dll", 'long', "FindWindowA", 'str', "Shell_traywnd", 'str', "")
    DllCall("User32.dll", "int", "GetWindowRect", "hwnd", $ret[0], "ptr", DllStructGetPtr($tRect))
    Local $left = DllStructGetData($tRect, 1)
    Local $top = DllStructGetData($tRect, 2)
    Local $right = DllStructGetData($tRect, 3)
    Local $bottom = DllStructGetData($tRect, 4)

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

    Local $sReturn[4]
    $sReturn[2] = @DesktopWidth
    $sReturn[3] = @desktopheight
    Select
    Case $left < 1 and $top > 0 ;unten
    $sReturn[3] = $top
    Case $top < 1 and $left < 1 and $right > $bottom ;oben
    $sReturn[1] = $bottom
    EndSelect
    return $sReturn
    EndFunc

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

    func RandomEx($sStart,$sEnd,$sInteger)
    If $sStart = $sEnd Then
    return $sStart
    Else
    return Random($sStart,$sEnd,$sInteger)
    EndIf
    EndFunc

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

    func GetMovement()
    Local $sCaller,$sVar,$sRandom = RandomEx(1,$hGroup,1)
    Do
    $sVar += 1
    $sCaller += $hBitmap[$sVar][0][4]
    until $sCaller >= $sRandom
    ;Zum Abend hin wird das Monster müde!
    If $sLMH[3][0] <> 0 and $hBitmap[$hMovement][0][1] = 2 and @hour > 16 and RandomEx(@hour,30,1) = 30 then return $sLMH[3][Random(1,$sLMH[3][0],1)]
    return $sVar
    EndFunc

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

    func GetOpacity()
    ;Transparens in Verbindung mit der Uhrzeit berechnen!
    Switch @HOUR
    Case 0 to 8
    return 150+ 105/8*@hour
    Case 18 to 23
    return 150+105/7*(24-@hour)
    Case Else
    return 255
    EndSwitch
    EndFunc

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

    func Die()
    If $sLMH[4][0] > 0 then ;falls Sterbebewegung vorhanden!
    SetMovement($sLMH[4][RandomEx(1,$sLMH[4][0],1)])
    _RedrawAnimal()
    $hFrame = 1
    $hMovement += 1
    do
    Sleep(10)
    $sPos = WinGetPos($hWnd)
    If TimerDiff($sTimer) >= $hBitmap[$hMovement][$hFrame][3] Then _RedrawAnimal()
    until $hFrame = $hBitmap[$hMovement][0][0]
    endif
    ExitCode()
    EndFunc

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

    ; Handle der WM_COMMAND Nachrichten
    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Switch $iwParam
    Case $nVisit
    ShellExecute("http://www.faweyr.bplaced.de/index.php?go=home")
    Case $nInfos
    InfoGui()
    Case $nExit
    Die()
    Case $nAllExit
    DeleteAllMapleDesktop()
    EndSwitch
    EndFunc ;==>WM_COMMAND

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

    func InfoGui()
    $nHwnd = GUICreate("Maple Desktop-Menu",300,150,-1,-1,-1,$WS_EX_TOOLWINDOW )
    GUICtrlCreateTab(0, 0, 300, 150)
    GUICtrlCreateGraphic ( 10, 30 , 280 ,110, $SS_ETCHEDFRAME )
    GUICtrlCreateTabItem(" Programm-Info ")
    GUICtrlCreateLabel("Autor: Faweyr" &@lf& "Version: 2.0" &@lf& "Last Update: 18.8.2010" &@lf&"Platforms: Win. XP/Win. Vista/Win. 7"&@lf& @lf&"Copyright © 2010 Fischer Johannes", 35, 40,250)
    GUICtrlCreateTabItem(" Animal-Info ")
    GUICtrlCreateLabel("Animal: " & $hName &@lf&"Autor: " & $hAutor &@lf& "Date: " & $hDate &@lf&@lf&$hCopyright, 35, 40,250,180)
    GUISetState()
    GUISetOnEvent($GUI_EVENT_CLOSE, "InfoClose",$nHwnd)
    EndFunc

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

    func InfoClose()
    GUIDelete($nHwnd)
    EndFunc

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

    ; Handle der WM_CONTEXTMENU Nachrichten
    Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $ilParam)
    $hMenu = _GUICtrlMenu_CreatePopup()
    _GUICtrlMenu_InsertMenuItem($hMenu, 0, "Visit Homepage", $nVisit)
    _GUICtrlMenu_InsertMenuItem($hMenu, 1, "Infos", $nInfos)
    _GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
    _GUICtrlMenu_InsertMenuItem($hMenu, 3, "Close", $nExit)
    _GUICtrlMenu_InsertMenuItem($hMenu, 3, "Close All", $nAllExit)
    _GUICtrlMenu_TrackPopupMenu($hMenu, $iwParam)
    _GUICtrlMenu_DestroyMenu($hMenu)
    Return True
    EndFunc ;==>WM_CONTEXTMENU

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

    func _WM_COPYDATA($hWnd, $msgID, $wParam, $lParam)
    local $tCOPYDATA = DllStructCreate('dword;dword;ptr', $lParam)
    local $tMsg = DllStructCreate('char[' & DllStructGetData($tCOPYDATA, 2) & ']', DllStructGetData($tCOPYDATA, 3))
    If DllStructGetData($tMsg, 1) = "@exit" then Die()
    endfunc; _WM_COPYDATA

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

    func DeleteAllMapleDesktop()
    ;Geht jedes sichtbare Fenster durch und kontrolliert ob dessen Prozess als Dateibeschreibung "Maple Desktop" hat, an diese wird dann ein "Kill-Befehl" gesendet!
    $aList = WinList()
    For $i = 1 to $aList[0][0]
    If $aList[$i][0] <> "" AND BitAnd(WinGetState($aList[$i][1]), 2 ) and $aList[$i][1] <> $hWnd then
    $oWMI = ObjGet("winmgmts:\\localhost\root\CIMV2")
    For $o In $oWMI.ExecQuery("SELECT ExecutablePath FROM Win32_Process WHERE ProcessID=" & WinGetProcess ($aList[$i][1]), "WQL", 48)
    If FileGetVersion($o.ExecutablePath, "FileDescription") = "Maple Desktop" then _SendData($aList[$i][1], "@exit")
    Next
    endif
    Next
    Die()
    EndFunc

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

    Func _SendData($hWnd, $sData)
    Local $tCOPYDATA, $tMsg
    $tMsg = DllStructCreate("char[" & StringLen($sData) + 1 & "]")
    DllStructSetData($tMsg, 1, $sData)
    $tCOPYDATA = DllStructCreate("dword;dword;ptr")
    DllStructSetData($tCOPYDATA, 2, StringLen($sData) + 1)
    DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tMsg))
    $Ret = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hWnd, "int", 0x004A, "wparam", 0, "lparam", DllStructGetPtr($tCOPYDATA))
    If (@error) Or ($Ret[0] = -1) Then Return 0
    Return 1
    EndFunc ;==>_SendData
    #EndRegion Animal
    ;EndRegion Animal

    [/autoit]
  • haha echt witzig. ich fänd es noch lustig wen man die mit der maus packen könnte ^^ und sie evt werffen (ne überlegung bei der landung, tauch n kissen auf und fängt den sturtz ab) wirr wollen doch keine Pixel Tiere mishandeln ^^ sonst kommt noch der tierschutz für Cybertiere xD haha :D

  • @all: Danke für eure guten Beiträge. Wie es aussieht hat noch niemand Fehler entdeckt :thumbup:
    @Fabian: Der Fehler tritt bei mir auch auf, jedoch spinnt der Debugger (glaub ich). Was hast du den an der "angepassten Version" verändert? 8| Ich sehe keinen Unterschied :thumbup: .
    @Gianna: Das mit dem Autostart hab ich mir schon überlegt und werde in nun auch mit integrieren.

    @darksider: Wenn du den Source liest, dann wird dir auffallen das das Tier merkt, wenn ein Fenster in Reichweite zum traufspringen ist und läuft/springt da hin :D . Bei den nächsten Versionen wird man das Tier höchswahrscheinlich auch wieder "anlangen", und NEIN, es wird damit keine Zoophilie unterstützt. :rofl:

    Ich würde gerne wissen ob bei allen son gestöhne/gequieke... als Sound kommt? Also ob der Sound funktioniert? 8o

  • Ich habe nur wie von dir hingewiesen den Pfad geändert..

    [autoit]

    #AutoIt3Wrapper_Res_File_Add=C:\Maple Desktop (Yeti)\Data\angry.0.png, rt_rcdata,angry.0

    [/autoit]

    Lg, Fabian

    Edit:

    Die bereits kompilierte Version läuft einwandfrei inkulsive der Sounds..
    Aber die Katze muss sehr oft aufs Klo.. :)

  • Das ist so ein geiles Projekt xD...
    Konnte man die nicht mal anfassen? Schade, dass das nicht mehr geht :p.
    Gabs nicht auch mal ne Interaktion? Füttern oder so? :)

    Die Website ist auch TOLL geworden^^...


    LG

  • Ich kanns von der Arbeit aus nicht downloaden warum auch immer -.-

    aber du hast einen Schreibfehler auf deiner Seite^^

    Spoiler anzeigen

    Ein ähnliches Programm wurde schon am November 2009 von mir im AutoIt-Forum gepostet. Jedoch war dieses noch sehr aufwendig zu updaten und besaß einige krafische Fehler. Der hier vorgestellte Maple Desktop hat folgende Eigenschaften:

  • :rofl: , ja das mit dem "krafisch" hat mir auch mein Bruder schon gesagt, nur kam ich noch nicht dazu das abzuändern. Die Homepage war ne scheiß Arbeit für mich, da ich davor kein html,php oder mit Gimp so was erstellen konnte. Das anfassen war mal möglich in dem alten MD, ebenso das füttern und Ball spielen, das fand ich aber nervig... :thumbup:

  • @Faweyr

    Der Affe von deine Tieren hat glaube ich einen Fehler (weis jezt nicht ob das nur am Pc liegt habs auf noch keinem anderen getestet)

    Aber der wird andauernd neu gestarten oder wie man das nennt, also dass er von der Leiste unten einfach weg ist und wieder von oben runterfällt

    bei den anderen Tieren ist das nciht so deshalb wollte ich mal fragen ob das normal ist?

  • Das mit dem Affen kenn ich, es tritt auf wenn die Y-Position des Fensters gleichbleibt und die Höhe des Fensters größer wird so befindet es sich nicht mehr direkt auf der Taskleiste und es fällt durch. Dies sollte jedoch nicht auftreten den ich versetze einfach die Y-Position! :whistling: . Ein weitere Möglichkeit wäre ein Fehler in der Array!. Dieser Bug wird jedoch bald nicht mehr auftreten, da ich an einem Programm schreibe, dem ich nur noch eine xml-Datei vorsetze mit Sprites und es übernimmt dann das erstellen und kompilieren des Maple Desktops.
    Danke für eure Interresse, es freut mich zu sehen das es nicht ganz sinnlos ist 8o .

  • Mir gefällts auch :thumbup:
    Aber ich fände noch besser, wenn die Tiere nicht nur hin und her laufen und ihre Stimmung zeigen, sondern auch noch auf den offenen Fenstern runspringen, was essen, vllt auch den Bildschirm zerkratzen, sich vllt. auch gegenseitig jagen... ;)

  • Jub, ich überlege gerade auch einfach zu realisierende Dinge, die jedoch gut ankommen. Das die Tiere über Sprechblasen sprechen ist geplannt, über Plugins kann man so also zb das aktuelle Wetter anzeigen.
    Ich teste gerade folgendes:

    [autoit]

    send("^!{up}")

    [/autoit]

    , damit lässt sich der Bildschirm drehen, so können die Tiere auf der Seite laufen. Jedoch sollten es nicht zu nervige Sachen in Betracht gezogen werden.
    Über die _SendData($hWnd, $sData)-Funktion können die Programme schon sich gegenseitig Befehle erteilen. Das es eine Art Rudelverhalten gibt ist vielleicht auch geplant. Eben immer von der CPU-Leistung abhängig! :D