Desktop UDF

  • Hallo,
    Ich habe eine Desktop Udf geschrieben.
    Es war ein mehr Arbeit als gedacht aber hier ist das Ergebnis :party:

    Es gibt eigentlich gar nicht viel dazu zu sagen, die Funktionen sind im Script ausführlich beschrieben.


    Code
    [autoit]

    #include <GdiPlus.au3>

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

    Global Const $Wallpaper = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop","Wallpaper")

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _GDIPlus_DrawImageToDesktop()
    ; Description ...: Malt ein Bild auf den Desktop das bei beenden des Scriptes wieder verschwindet.
    ; Syntax ........: _GDIPlus_DrawImageToDesktop($ImagePath,$posX,$posY[,$output = 'C:\WallpaperBackup.bmp'])
    ; Parameters ....: $ImagePath - Pfad zum Bild
    ; $posX - Positon auf der Y Achse
    ; $posY - Positon auf der Y Achse
    ; $output- [optional] Pfad an dem der erstellte Desktop zwischengespeichert wird. (default:'C:\WallpaperBackup.bmp')
    ; Author ........: Ubuntu
    ; Remarks .......: All rights reserved by Ubuntu
    ; Related .......: _GDIPlus_DrawStringToDesktop
    ; =================================================================================================

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

    Func _GDIPlus_DrawImageToDesktop($ImagePath,$posX,$posY,$output = 'C:\WallpaperBackup.bmp')
    OnAutoItExitRegister("Wallpaper_Clear")

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

    $LoadWallpaper = _GDIPlus_ImageLoadFromFile($Wallpaper)
    $Image = _GDIPlus_ImageLoadFromFile($ImagePath)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext ($LoadWallpaper)
    _GDIPlus_GraphicsDrawImage($hGraphics, $Image, $posX, $posY)
    _GDIPlus_ImageSaveToFile($LoadWallpaper,$output)
    _GDIPlus_ImageDispose($LoadWallpaper)
    _GDIPlus_ImageDispose($Image)
    DllCall("user32.dll", "int", "SystemParametersInfo", "uint", 20, "uint", 0, "str", $output, "uint", BitOR(0x2,0x1))
    EndFunc

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _GDIPlus_DrawStringToDesktop()
    ; Description ...: Malt einen String auf den Desktop der bei beenden des Scriptes wieder verschwindet.
    ; Syntax ........: _GDIPlus_DrawStringToDesktop($String,$posX,$posY[,$Font = 'Arial'[,$FontSize = '24'[,$output = 'C:\WallpaperBackup.bmp'[,$color = 0xFF00FF00]]]])
    ; Parameters ....: $String - String der angezeigt werden soll
    ; $posX - Positon auf der Y Achse
    ; $posY - Positon auf der Y Achse
    ; $Font - [optional] (default:'Arial')
    ; $FontSize - [optional] (default:'24')
    ; $output - [optional] Pfad an dem der erstellte Desktop zwischengespeichert wird. (default:'C:\WallpaperBackup.bmp')
    ; $color- [optional] (default:0xFF00FF00)
    ; Author ........: Ubuntu
    ; Remarks .......: All rights reserved by Ubuntu
    ; Related .......: _GDIPlus_DrawImageToDesktop
    ; =================================================================================================

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

    Func _GDIPlus_DrawStringToDesktop($String,$posX,$posY,$Font = 'Arial',$FontSize = '24',$output = 'C:\WallpaperBackup.bmp',$color = 0xFF00FF00)
    OnAutoItExitRegister("Wallpaper_Clear")

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

    $LoadWallpaper = _GDIPlus_ImageLoadFromFile($Wallpaper)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext ($LoadWallpaper)
    $hBrush = _GDIPlus_BrushCreateSolid($color)
    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate($Font)
    $hFont = _GDIPlus_FontCreate($hFamily, $FontSize, 2)
    $tLayout = _GDIPlus_RectFCreate($posX,$posY)
    $Layout = _GDIPlus_GraphicsMeasureString($hGraphics, $String, $hFont, $tLayout, $hFormat)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $String, $hFont, $Layout[0], $hFormat, $hBrush)
    _GDIPlus_ImageSaveToFile($LoadWallpaper,$output)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_ImageDispose($LoadWallpaper)
    DllCall("user32.dll", "int", "SystemParametersInfo", "uint", 20, "uint", 0, "str", $output, "uint", BitOR(0x2,0x1))
    EndFunc

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _DesktopRestore()
    ; Description ...: Aktualisiert den Desktop
    ; Syntax ........: _DesktopRestore([$output = $Wallpaper])
    ; Parameters ....: $output - [optional] Pfad an dem der erstellte Desktop zwischengespeichert wird. (default:$Wallpaper)
    ; Remarks .......: All rights reserved by Ubuntu
    ; =================================================================================================

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

    Func _DesktopRestore($output = $Wallpaper)
    DllCall("user32.dll", "int", "SystemParametersInfo", "uint", 20, "uint", 0, "str", $output, "uint", BitOR(0x2,0x1))
    EndFunc

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: Wallpaper_Clear()
    ; Description ...: Just internal use.
    ; =================================================================================================

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

    Func Wallpaper_Clear()
    DllCall("user32.dll", "int", "SystemParametersInfo", "uint", 20, "uint", 0, "str", $Wallpaper, "uint", BitOR(0x2,0x1))
    EndFunc

    [/autoit]
    Beispiel
    [autoit]

    #include "DrawToDesktop-Udf.au3"
    #include <GdiPLus.au3>;muss nicht sein

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

    #RequireAdmin ;unter Vista oder Win7
    _GDIPlus_Startup()
    _GDIPlus_DrawImageToDesktop("C:\_D_\meinBild.gif",200,200);bei Draw_string ist es das gleiche
    Sleep(3000)
    _GDIPlus_Shutdown()
    _DesktopRestore()
    Exit

    [/autoit]

    mfg Ubuntu

    Edit: WICHTIG: Die Bilder können wenn der Desktop hintergrund verzerrt ist ebenfalls verzerrt sein.

    5 Mal editiert, zuletzt von Ubuntu (28. Mai 2010 um 20:26)

  • Also bei mit kommt immer:

    Zitat

    >"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\ScriptBär\Desktop\TEST.au3" 
    C:\Program Files\AutoIt3\Include\GdiPlus.au3 (960) : ==> Subscript used with non-Array variable.:
    For $iI = 1 To $aEncoders[0][0]
    For $iI = 1 To $aEncoders^ ERROR
    >Exit code: 1 Time: 0.576

    Liegt dass an deinem Script, der GDI-Funktion, oder meinem Skript?

    [autoit='Mein Script']

    #include <C:\Users\SkriptBär\Desktop\Desktop.au3>

    _GDIPlus_DrawImageToDesktop("C:\Users\SkriptBär\Desktop\1.jpg",20,20)

    Sleep(1000)

    _DesktopRestore()

    [/autoit]

    Ubuntu's Skript liegt auf meinem Desktop, da ich auf einem Konto ohne Admin-Rechte arbeite (=> include ordner gespert!)

  • Edit: @tince: Nein wird autmatisch eingebunden, kann aber nicht schaden.
    Du musst GdiPlus starten.
    Deshalb heisst es Ja _GDIPlus_DrawImageToDesktop

    mfg Ubuntu

    EDIT: Beispiel hinzugeügt siehe Post 1

  • Kommt mir irgendwie bekannt vor
    ah ja aus autoitscript.com

    [autoit]

    Func _SetDeskWallpaper($Filename)
    DllCall("user32.dll", "long", "SystemParametersInfo" _
    , "long", $SPI_SETDESKWALLPAPER _
    , "long", 0 _
    , "str", $Filename _
    , "long", BitOR($SPIF_UPDATEINIFILE, $SPIF_SENDWININICHANGE) _
    )
    EndFunc ;==>_SetDeskWallpaper

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

    Func _GetDeskWallpaper()
    Local $Filename = DllStructCreate("char[256]")
    DllCall("user32.dll", "long", "SystemParametersInfo" _
    , "long", $SPI_GETDESKWALLPAPER _
    , "long", 255 _
    , "ptr", DllStructGetPtr($Filename) _
    , "long", 0 _
    )

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

    Return DllStructGetData($Filename, 1)
    EndFunc ;==>_GetDeskWallpaper

    [/autoit]

    Sry aber ich weis nicht mehr von wem es ist

  • Das kannte ich noch nicht.
    Kannste mal den Link posten?

    Sieht mir aber nach einer weniger umfangreichen Funktion aus.

    Vielleicht kann ich mir da trotzdem was abgucken ;)

    mfg Ubuntu

  • Also bei mir funktioniert es immer noch nicht ...
    Mein Skript:

    [autoit]

    #include <C:\Users\Luca\Desktop\Desktop.au3>
    #include <GdiPlus.au3>

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

    _GDIPlus_Startup()
    _GDIPlus_DrawImageToDesktop("C:\Users\Luca\Desktop\1.gif",200,200)
    Sleep(3000)
    _GDIPlus_Shutdown()
    _DesktopRestore()
    Exit

    [/autoit]

    Mein Bild: (siehe Anhang)

    Ich komm einfach icht auf den Fehler ?(

  • [autoit]

    #include "DrawToDektop-Udf .au3"
    ;~ #include <GdiPLus.au3>

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

    ;~ MsgBox(0,"",@DesktopDir)

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

    _GDIPlus_Startup()
    _GDIPlus_DrawImageToDesktop(@DesktopDir & "\1.gif",100,100);ob 100 oder 200 sollte egal sein
    Sleep(3000)
    _GDIPlus_Shutdown()
    _DesktopRestore()
    Exit

    [/autoit]

    So gehts bei mir.
    Wenns bei dir immer noch nicht geht dann schreib mal dein Betriebssystem.

    mfg Ubuntu

    Edit: hast du überhaupt ein Hintergrund Bild? Wenn nicht gehts natürlich nicht.
    Edit2:Versuch mal den Udf Pfad in Anführungszeichen zu setzen.

  • Es klappt immer noch nicht! ;(

    > Ich habe ein Hintergrundbild. (Win7 Standart)
    > (Nochmal) mein Skript:

    Spoiler anzeigen
    [autoit]

    #include "C:\Users\SkriptBär\Desktop\Desktop.au3"
    ;~ #include <GdiPLus.au3>

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

    MsgBox(0,"",@DesktopDir)

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

    _GDIPlus_Startup()
    _GDIPlus_DrawImageToDesktop(@DesktopDir & "\1.gif",100,100);ob 100 oder 200 sollte egal sein
    Sleep(3000)
    _GDIPlus_Shutdown()
    _DesktopRestore()
    Exit

    [/autoit]


    >Mein System:

    Spoiler anzeigen


    System
    Betriebssystem Windows7 Professional
    Gesamter Systemspeicher 1,00 GB RAM
    Systemtyp 32 Bit-Betriebssystem
    Anzahl der Prozessorkerne 2

    Speicher
    Gesamtgröße der Festplatte(n) 233 GB
    Datenträgerpartition (C) 79 GB frei (117 GB gesamt)
    Datenträgerpartition (D) 116 GB frei (116 GB gesamt)

    Grafik
    Grafikkartentyp NVIDIA GeForce 8500 GT (Microsoft Corporation - WDDM v1.1)
    Insgesamt verfügbarer Grafikspeicher 1279 MB
    Dedizierter Grafikspeicher 1024 MB
    Dedizierter Systemarbeitsspeicher 0 MB
    Gemeinsam genutzter Systemspeicher 255 MB
    Grafikkarten-Treiberversion 8.15.11.8593
    Auflösung des primären Monitors 1280x1024
    DirectX-Version DirectX 10

    Netzwerk
    Netzwerkadapter Realtek RTL8168B/8111B-Familie-PCI-E-Gigabit-Ethernet-NIC (NDIS 6.20)

  • Kommt ein Error?

    Bist du sicher das der Pfad eichtig ist
    #include "C:\Users\SkriptBär\Desktop\Desktop.au3"
    Sonst versuch mal

    [autoit]

    #include @DesktopDir & "\Desktop.au3"

    [/autoit]

    mfg Ubuntu

  • [autoit]

    #include "DrawToDektop-Udf .au3"

    [/autoit]


    Ist das so gewollt................^................^, ...............:rolleyes: oder ein Copy Paste Schutz

    - MfG OpaEd

  • Aber einen kleinen Vorschlag hab ich noch für dich:

    Zum Beispiel in der Funktion:

    [autoit]


    Func _GDIPlus_DrawImageToDesktop($ImagePath,$posX,$posY,$output = 'C:\WallpaperBackup.bmp')
    OnAutoItExitRegister("Wallpaper_Clear")
    $LoadWallpaper = _GDIPlus_ImageLoadFromFile($Wallpaper)
    $Image = _GDIPlus_ImageLoadFromFile($ImagePath)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext ($LoadWallpaper)
    _GDIPlus_GraphicsDrawImage($hGraphics, $Image, $posX, $posY)
    _GDIPlus_ImageSaveToFile($LoadWallpaper,$output)
    _GDIPlus_ImageDispose($LoadWallpaper)
    _GDIPlus_ImageDispose($Image)
    DllCall("user32.dll", "int", "SystemParametersInfo", "uint", 20, "uint", 0, "str", $output, "uint", BitOR(0x2,0x1))
    EndFunc

    [/autoit]

    Werden ja den Variable'n: $LoadWallpaper, ...... ein Wert zugewiesen.
    Aber besser wäre, wenn du die Var. nur für die Funktion geltend machst, Sprich: Local $LoadWallpaper...

    Du weißt bestimmt was ich meine ..... ;)

  • @DjBlume:
    Das ist Local (automatisch) ;)


    opaed:
    Es ist bei mir so (ich habs so genannt weils ne neue Version ist)

    mfg Ubuntu

  • @Ubuntu 
    ;) Sollte keine Kritik an deiner UDF sein, nur schau dir mal dir mal auf was die Caret`s-Zeichen zeigen.
    ..........^...........^.........

    [autoit]

    #include "DrawToDektop-Udf .au3"

    [/autoit]


    Setz noch das "s" bei DrawToDe...ktop-Udf ein und rück ".au3" an das Udf ein, da hast du ein Leerzeichen zwischen.

    - MfG OpaEd

    Einmal editiert, zuletzt von opaed (21. Mai 2010 um 22:46)