auto desktop changer

  • Hi,
    ich bin an einem "auto desktop-background changer" dran, den ich als übung scripten will.
    ich brauch eine hilfestellung weil ich nicht weis wie ich meine vorstellung scripten sol.

    die bilder solten in eine bestimmten reihenfolge gewechselt werden also wenn bild1 mit bild2 überschrieben wird solte in einer art .ini datei bild3 geschrieben werden sodas bei dem nächsten start die .ini ausgelesen wird und bild2 mit bild3 ersetzt wird.

    wie man merkt bin ich noch anfänger
    danke für eure antworten

  • Du meinst also, alle x Sekunden soll das Desktophintergrundbild wechseln? Die Pfade, bzw. benötigte Information willst du aus einer *.ini rausholen? Soll das Programm nur das Wechseln beherrschen oder auch am Anfang nachfragen welche Bilder verwendet werden sollen?
    EDIT: Nebenbei, das hat sogar schonmal wer gemacht: [ offen ] DEsktop Hintergrund

    Einmal editiert, zuletzt von Aquaplant (23. Dezember 2009 um 00:17)

  • nein der script wird in den autostart kopiert sodas der script nur beim hochfahren das bild wechselt

    der quell- und zielpfad ist vorher festgelegt die bilder werden nach einer reihenfolge gewechselt also bild1 wird mit bild2 gewechselt und dan wird das nächste bild festgelegt. beim nächsten start wieder alles von vorne

    die bilder sind im script festgelegt also nur über autoit änderbar

    der script soll nur -starten - bild wechseln - festlegen welches als nächstes drankommt - und end

  • Also im Grunde sowas hier:

    Spoiler anzeigen
    [autoit]

    #include
    $GUI = GUICreate("Form1", 444, 128, 193, 125)
    $Bildauswahl = GUICtrlCreateCombo("Bildauswahl", 16, 32, 401, 25)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Ok = GUICtrlCreateButton("Ok", 152, 64, 137, 49, 0)
    GUICtrlSetFont(-1, 30, 400, 0, "Modern No. 20")

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

    $Existiert = FileExists(@AppDataCommonDir & "/Bilder.ini")
    Global $a = 0
    If $Existiert = 0 Then
    IniWrite(@AppDataCommonDir & "/Bilder.ini", "Zeit", "NächstesBildnach", "60000")
    $Bildermenge = InputBox("Bilder", "Wie viele Bilder? 1-n")
    For $a = 1 To $Bildermenge Step +1
    $Bildpfad = InputBox("Bild "&$a, "Pfad für Bild "&$a)
    IniWrite(@AppDataCommonDir & "/Bilder.ini", "Bild", $a, $Bildpfad)
    Next
    Else
    GUISetState(@SW_SHOW, $GUI)
    $Bilderanzahl = IniReadSection(@AppDataCommonDir & "/Bilder.ini", "Bild")
    For $a = 1 To $Bilderanzahl[0][0]
    GUICtrlSetData($Bildauswahl, $Bilderanzahl[$a][1])
    Next
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Ok
    $gewaltesBild = GUICtrlRead($Bildauswahl)
    Call("Hintergrundandern")
    EndSwitch
    WEnd
    EndIf
    Func Hintergrundandern()
    ;~ schau ich mir später mal an wie das geht
    MsgBox(0, "Bild:", $gewaltesBild)
    EndFunc

    [/autoit]


    Habs grad schnell mal zusammengeschrieben. Sollte aber funktionieren. Ich bin jetzt erstmal schlafen - aber wir schreiben uns bestimmt morgen nochmal (hast wahrscheinlich auch noch viele Fragen zu den einzelnen Sachen)
    Gute Nacht
    Aquaplant
    EDIT: Includes werden wohl hier im Forum nicht mehr so angenommen... Erste Zeile ist "#include <GUIConstants.au3>" ohne die " ;)

  • danke für deine mühe aber ich glaub ich bin zu doof das zu erklären :D
    der script wird ja in den autostart gelegt damit der bei jedem start das desktop bild wechselt
    das ich die bilder vorher festlege meinte ich das sie schon im script eingefügt sind

    meine frage noch: muss ich das bild über die registry ändern?

  • Nein, das scheint über eine Dll zu laufen:

    [autoit]

    Global Const $SPIF_UPDATEINIFILE = 0x1
    Global Const $SPI_SETDESKWALLPAPER = 20
    Global $defaultwallpaper = "c:\bild.bmp"

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

    DllCall("user32.dll", "int", "SystemParametersInfo", "uint", $SPI_SETDESKWALLPAPER, "uint", 0, "str", $defaultwallpaper, "uint", BitOR($SPIF_SENDWININICHANGE,$SPIF_UPDATEINIFILE))

    [/autoit]


    So hat es jedenfalls Gummibaer gemacht (s.Link oben)
    EDIT: In den "richtigen" Autostart kannst du es übrigens so legen:

    [autoit]

    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Speed", "REG_SZ", "C:\Dokumente und Einstellungen\" & @UserName & "\Anwendungsdaten\Start\irgendwas.exe")

    [/autoit]
  • hier auch noch ein Skript zum ändern ;)

    Spoiler anzeigen
    [autoit]

    Global Const $SPIF_UPDATEINIFILE = 0x01
    Global Const $SPIF_SENDWININICHANGE = 0x02
    Global Const $SPI_SETSCREENSAVEACTIVE = 0x11
    Global Const $SPI_SETDESKWALLPAPER = 0x14
    Global Const $SPI_GETDESKWALLPAPER = 0x73

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

    Global $Bitmap = @WindowsDir & "\WINNT.bmp"

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

    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "TileWallpaper", "REG_SZ", "0")
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "WallpaperStyle", "REG_SZ", "0")
    _SetDeskWallpaper($Bitmap)

    [/autoit] [autoit][/autoit] [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]