Win7 Logon-Bild Wechsler

  • Hallo @all!
    Ich hab mal ein bischen gekoodet:
    In Windows 7 ist es ja möglich den hintergrund des Anmelde-Bildschirms zu ändern.
    Also habe ich dafür einen Skript geschrieben.

    Der Skript kann:
    - Den Hintergrund wechseln
    - Den Hintergrund auf den Standart zurücksetzen.
    - Anzeigen ob der Hintergrund standart oder Benutzerdefienirt ist.

    Ich habe ledider (noch) keinen Win7 Pc. Deshalb konnte ich das Skript noch nicht testen.
    theoretisch müsste alles klappen.
    Ich bitte also um rückmeldung!

    Und hier der Skript:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #Include <GDIPlus.au3>
    #RequireAdmin
    #NoTrayIcon

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

    If @OSVersion <> "WIN_7" then
    MsgBox(16, "Fehler", "Dein Betriebssystem ist nicht Windows 7.")
    Exit
    EndIf
    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    Global $ExitID

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

    _Main()

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

    Func _Main()
    Local $createID, $DeleteID

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

    GUICreate("Custom Msgbox", 300, 80)

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

    GUICtrlCreateLabel("Bitte wählen sie eine Aktion aus. ", 10, 10)
    GUICtrlCreateLabel("Aktueller Status: ", 10, 30)
    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground") = 1 then
    GUICtrlCreateLabel(">Benutzerdifiniert< ", 100, 30)
    Else
    GUICtrlCreateLabel(">Standart< ", 100, 30)
    EndIf
    $CreateID = GUICtrlCreateButton("Anmeldebildschirm verändern.", 10, 50)
    GUICtrlSetOnEvent($CreateID, "OnCreate")
    $DeleteID = GUICtrlCreateButton("Standart wiederherstellen.", 170, 50)
    GUICtrlSetOnEvent($DeleteID, "OnDelete")

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")

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

    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd
    EndFunc

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

    Func OnDelete()
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground")
    If @error = 0 Then
    MsgBox(16, "Fehler", "Registry-Wert konnte nicht gelöscht werden. Bitte manuell löschen." & @CRLF & "" & @CRLF & "Registry-Wert:" & @CRLF & "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background\OEMBackground")
    Else
    MsgBox(0, "Info", "Registry-Wert erfolgreich gelöscht.")
    EndIf
    MsgBox(48, "ACHTUNG!", "Nun wird ein Befehl ausgeführt der den selben effekt wie ein Neustart hat.")
    EnvUpdate()
    EndFunc

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

    Func OnExit()
    Exit
    EndFunc

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

    Func OnCreate()
    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground" ) <> 1
    Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground", "REG_DWORD", "1") and MsgBox(0, "Info", "Registry-Wert wurde erstellt")
    If @error <> 0 Then
    MsgBox(16, "Fehler", "Registry-Wert konnte nicht erstellt werden!")
    Else
    MsgBox(0, "Info", "Registry-Wert exsistiert berits!")
    Endif

    If FileExists(@HomeDrive & "\Windows\System32\oobe\info\backgrounds") Then
    MsgBox(4096, "Info", "Erforderliches Verzeichnis wurde erstellt.")
    Else
    DirCreate(@HomeDrive & "\Windows\System32\oobe\info\backgrounds")
    MsgBox(4096, "Info", "Erforderliches Verzeichnis existiert")
    EndIf
    $Bild = FileOpenDialog ( "Bitte Bild auswählen.", "@DesktopDir", "JPG-Bild (*.jpg)" , 1 )
    _GDIPlus_Startup()
    $BildL = _GDIPlus_ImageLoadFromFile($Bild)
    $X = _GDIPlus_ImageGetWidth ($BildL)
    $Y = _GDIPlus_ImageGetHeight ($BildL)
    If $X <> @DesktopWidth Then
    MsgBox(16,"Error","Ihr Bild hat die falsche Breite") Exit
    EndIf
    If $Y <> @DesktopHeight Then
    MsgBox(16,"Error","Ihr Bild hat die falsche Höhe") Exit
    EndIf
    If FileGetSize($Bild) > 262144 Then
    MsgBox(16, "Fehler", "Bild ist zu groß (über 256 KB).") Exit
    EndIf

    MsgBox(48, "ACHTUNGG!", "Ihr bild wird verschoben. " & @CRLF & "Das Bild ist anschlisend nicht mehr im Quellverzeichniss vorhanden.")
    FileMove($Bild, @HomeDrive & "\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg" , 1)
    If @error <> 0 Then MsgBox(16, "Fehler", "Bild kann nicht kopiert werden.")
    MsgBox(48, "ACHTUNG!", "Nun wird ein Befehl ausgeführt der den selben effekt wie ein Neustart hat.")
    EnvUpdate()
    EndFunc

    [/autoit]


    Viel Spaß! ;)

  • Ich habs zwar noch nicht getestet aber wie machst du ein programm für die funktionen von win7 mit registry und hast kein win7 oder hat du eine testversion in einer virtualisierungs Software laufen?

    gruß Simon

  • Er hat eigentlich "nur" eine allgemein bekannte Anleitung automatisiert. Von daher braucht er nicht zwingend ein Windows7. Denke auch das es so wie er es umgesetzt hat funktioniert. Testen werd ich später.

    Was mir beim überfliegen aufgefallen ist sind ein paar kleine syntaktische Fehler. Zum Beispiel in Zeile 59/60 und ab 78. In Zeile 67-71 scheinen die Messageboxen etwas durcheinander geraten zu sein.

    edit: Getestet. Wie erwartet funktioniert es nach ein paar kleinen Ausbesserungen wunderbar. Ich persönlich würde aus dem FileMove() ein FileCopy() machen. Find es nicht unbedingt anwenderfreundlich eine Datei zu verschieben ohne das der User den Vorgang abbrechen kann. Eine automatische Skalierung der Bilder wär vieleicht noch recht nützlich.

    Nettes, kleines Tool für alle die kein Bock auf LogonStudio oder TuneUp haben :thumbup:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    #RequireAdmin
    #NoTrayIcon

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

    If @OSVersion <> "WIN_7" Then
    MsgBox(16, "Fehler", "Dein Betriebssystem ist nicht Windows 7.")
    Exit
    EndIf
    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    Global $ExitID

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

    _Main()

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

    Func _Main()
    Local $createID, $DeleteID
    GUICreate("Custom Msgbox", 300, 80)
    GUICtrlCreateLabel("Bitte wählen sie eine Aktion aus. ", 10, 10)
    GUICtrlCreateLabel("Aktueller Status: ", 10, 30)
    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground") = 1 Then
    GUICtrlCreateLabel(">Benutzerdifiniert< ", 100, 30)
    Else
    GUICtrlCreateLabel(">Standart< ", 100, 30)
    EndIf
    $createID = GUICtrlCreateButton("Anmeldebildschirm verändern.", 10, 50)
    GUICtrlSetOnEvent($createID, "OnCreate")
    $DeleteID = GUICtrlCreateButton("Standart wiederherstellen.", 170, 50)
    GUICtrlSetOnEvent($DeleteID, "OnDelete")
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd
    EndFunc ;==>_Main

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

    Func OnDelete()
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground")
    If @error = 0 Then
    MsgBox(16, "Fehler", "Registry-Wert konnte nicht gelöscht werden. Bitte manuell löschen." & @CRLF & "" & @CRLF & "Registry-Wert:" & @CRLF & "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background\OEMBackground")
    Else
    MsgBox(0, "Info", "Registry-Wert erfolgreich gelöscht.")
    EndIf
    MsgBox(48, "ACHTUNG!", "Nun wird ein Befehl ausgeführt der den selben effekt wie ein Neustart hat.")
    EnvUpdate()
    EndFunc ;==>OnDelete

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

    Func OnExit()
    Exit
    EndFunc ;==>OnExit

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

    Func OnCreate()
    Local $Bild, $BildL, $hGraphicsImg, $hBitMap, $hImage, $X, $y

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

    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground") <> 1 Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground", "REG_DWORD", "1")
    MsgBox(0, "Info", "Registry-Wert wurde erstellt")
    If @error <> 0 Then
    MsgBox(16, "Fehler", "Registry-Wert konnte nicht erstellt werden!")
    EndIf
    Else
    MsgBox(0, "Info", "Registry-Wert exsistiert berits!")
    EndIf

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

    If FileExists(@HomeDrive & "\Windows\System32\oobe\info\backgrounds") Then
    MsgBox(4096, "Info", "Erforderliches Verzeichnis existiert bereits.")
    Else
    DirCreate(@HomeDrive & "\Windows\System32\oobe\info\backgrounds")
    MsgBox(4096, "Info", "Erforderliches Verzeichnis wurde erstellt.")
    EndIf
    $Bild = FileOpenDialog("Bitte Bild auswählen.", "@DesktopDir", "JPG-Bild (*.jpg)", 1)
    _GDIPlus_Startup()
    $BildL = _GDIPlus_ImageLoadFromFile($Bild)
    $X = _GDIPlus_ImageGetWidth($BildL)
    $y = _GDIPlus_ImageGetHeight($BildL)
    If $X <> @DesktopWidth Or $y <> @DesktopHeight Then
    MsgBox(16, "Fehler", "Die Bildgrösse entspricht nicht der Dektopauflösung")
    Exit
    EndIf
    If FileGetSize($Bild) > 262144 Then
    MsgBox(16, "Fehler", "Bild ist zu groß (über 256 KB).")
    Exit
    EndIf
    FileCopy($Bild, @HomeDrive & "\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg", 1)
    If @error <> 0 Then
    MsgBox(16, "Fehler", "Bild kann nicht kopiert werden.")
    EndIf
    MsgBox(48, "ACHTUNG!", "Nun wird ein Befehl ausgeführt der den selben Effekt wie ein Neustart hat.")
    EnvUpdate()
    EndFunc ;==>OnCreate

    [/autoit]
    Image skalieren
    [autoit]

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

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

    _ImageResize(@DesktopDir & "\Chrysanthemum.jpg", @DesktopDir & "\Chrysanthemum_resized.jpg", @DesktopWidth, @DesktopHeight)

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

    ; #FUNCTION# =========================================================================================
    ; Name...........: _ImageResize
    ; Description....: Resize an image and optionally convert it to the format you want.
    ; Syntax.........: _ImageResize($sInImage, $sOutImage, $iW, $iH)
    ; Parameters ....: $sInImage - Full path to the image to resize / convert.
    ; In types: *.bmp, *.gif, *.ico, *.jpg, *.jpeg, *.png, *.tif, *.tiff
    ; $sOutImage - Full path where to save the resized / converted image.
    ; Out types: *.bmp, *.gif, *.jpg, *.jpeg, *.png, *.tif, *.tiff
    ; $iW - Width to resize image to.
    ; $iH - Height to resize image to.
    ; Return values .: Success - Return 1 and @error 0
    ; Failure - Return 0 and @error 1~5
    ; @error 1 = In File does not exist
    ; @error 2 = In File format not supported
    ; @error 3 = Out File path does not exist
    ; @error 4 = Out file format not supported
    ; @error 5 = Resize Width or Height not an integer
    ; Author ........: smashly
    ; ====================================================================================================
    Func _ImageResize($sInImage, $sOutImage, $iW, $iH)
    Local $sOP, $sOF, $sInExt, $Ext, $hBitmap, $hImage1, $hImage2, $hGraphic, $CLSID, $i = 0
    Local $sType = "BMP|GIF|ICO|JPG|JPEG|PNG|TIF|TIFF"

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

    If Not FileExists($sInImage) Then Return SetError(1, 0, 0)
    $sInExt = StringUpper(StringTrimLeft($sInImage, StringInStr($sInImage, ".", 0, -1)))
    If Not StringRegExp($sInExt, "\A(" & $sType & ")\z", 0) Then Return SetError(2, 0, 0)

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

    ;OutFile path, to use later on.
    $sOP = StringLeft($sOutImage, StringInStr($sOutImage, "\", 0, -1))
    If Not FileExists($sOP) Then Return SetError(3, 0, 0)

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

    ;OutFile name, to use later on.
    $sOF = StringTrimLeft($sOutImage, StringInStr($sOutImage, "\", 0, -1))

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

    ;OutFile extension , to use for the encoder later on.
    $Ext = StringUpper(StringTrimLeft($sOutImage, StringInStr($sOutImage, ".", 0, -1)))
    If Not StringRegExp($Ext, "\A(" & $sType & ")\z", 0) Or $Ext = "ICO" Then Return SetError(4, 0, 0)

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

    If Not IsInt($iW) And Not IsInt($iH) Then Return SetError(5, 0, 0)

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

    ; WinAPI to create blank bitmap at the width and height to put your resized image on.
    $hBitmap = _WinAPI_CreateBitmap($iW, $iH, 1, 32)

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

    ;Start GDIPlus
    _GDIPlus_Startup()

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

    ;Get the handle of blank bitmap you created above as an image
    $hImage1 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)

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

    ;Load the image you want to resize.
    $hImage2 = _GDIPlus_ImageLoadFromFile($sInImage)

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

    ;Get the graphic context of the blank bitmap
    $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)

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

    ;Draw the loaded image onto the blank bitmap at the size you want
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage2, 0, 0, $iW, $iH)

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

    ;Get the encoder of to save the resized image in the format you want.
    $CLSID = _GDIPlus_EncodersGetCLSID($Ext)

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

    ;Generate a number for out file that doesn't already exist, so you don't overwrite an existing image.
    Do
    $i += 1
    Until (Not FileExists($sOP & $i & "_" & $sOF))

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

    ;Prefix the number to the begining of the output filename
    $sOutImage = $sOP & $i & "_" & $sOF

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

    ;Save the new resized image.
    _GDIPlus_ImageSaveToFileEx($hImage1, $sOutImage, $CLSID)

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

    ;Clean up and shutdown GDIPlus.
    _GDIPlus_ImageDispose($hImage1)
    _GDIPlus_ImageDispose($hImage2)
    _GDIPlus_GraphicsDispose($hGraphic)
    _WinAPI_DeleteObject($hBitmap)
    _GDIPlus_Shutdown()
    Return SetError(0, 0, 1)
    EndFunc ;==>_ImageResize

    [/autoit]
  • werds auch testen wenn ich zuhause bin ;)

    Zitat

    In Windows 7 ist es ja möglich den hintergrund des aAbnelde Bildschirms zu ändern.

    das is übrigens seit mindestens Win XP möglich.

  • Dabnke für eure Antworten!

    Danke an ideas2code für die Korrekturen. :thumbup:

    Aber ich habe noch ein paar Fragen: ?(

    • Wofür wäre ImageDispose gut ? Warum muss das Bild denn wieder freigegeben werden?
    • Wie meint ihr das mit einer Skalierfunktion ? Soll man damit das Bild zuschneiden können? Und wie müsste ich das in das Skript intigrieren?

    Zu euren Fragen:

    • Das Skript habe ich so geschrieben das es eine Anleitung automatiesiert.
    • FileMove habe ich benutzt damit die Datei im Zielverzeichniss auch umbennant wird. Aber das geht wohl auch mit FielCopy.
    • Schnitzel: "Das is übrigens seit mindestens Win XP möglich." Ja, stimmt. Aber unter Win XP/Vista war Zusatzsoftware (LogonStudio/TuneUp) nötig.

    Habt ihr vielleicht noch andere Ideen/Vorschläge/Gefundene Fehler?

  • Hallo @ all,
    ich hab mal eine 2. version des Skriptes geschrieben.

    Änderungen:

    • Korrekturen von ideas2Code eingebunden
    • ImageDispose eingebunden
    • Skalierfunktion eingebunden (meintet ihr das so :?: )
    Und hier Version 2:
    [autoit]

    #cs ============================
    Name: Win7 Logon-Bild Wechsler
    Version: 2
    Datum: 11.4.2010
    Autor: Script-Bär
    #ce ;===========================

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

    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <skalieren.au3>
    #include <WinAPI.au3>
    #RequireAdmin
    #NoTrayIcon

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

    If @OSVersion <> "WIN_7" Then
    MsgBox(16, "Fehler", "Dein Betriebssystem ist nicht Windows 7.")
    Exit
    EndIf
    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    Global $ExitID

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

    _Main()

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

    Func _Main()
    Local $createID, $DeleteID
    GUICreate("Custom Msgbox", 300, 80)
    GUICtrlCreateLabel("Bitte wählen sie eine Aktion aus. ", 10, 10)
    GUICtrlCreateLabel("Aktueller Status: ", 10, 30)
    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground") = 1 Then
    GUICtrlCreateLabel(">Benutzerdifiniert< ", 100, 30)
    Else
    GUICtrlCreateLabel(">Standart< ", 100, 30)
    EndIf
    $createID = GUICtrlCreateButton("Anmeldebildschirm verändern.", 10, 50)
    GUICtrlSetOnEvent($createID, "OnCreate")
    $DeleteID = GUICtrlCreateButton("Standart wiederherstellen.", 170, 50)
    GUICtrlSetOnEvent($DeleteID, "OnDelete")
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd
    EndFunc ;==>_Main

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

    Func OnDelete()
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground")
    If @error = 0 Then
    MsgBox(16, "Fehler", "Registry-Wert konnte nicht gelöscht werden. Bitte manuell löschen." & @CRLF & "" & @CRLF & "Registry-Wert:" & @CRLF & "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background\OEMBackground")
    Else
    MsgBox(0, "Info", "Registry-Wert erfolgreich gelöscht.")
    EndIf
    MsgBox(48, "ACHTUNG!", "Nun wird ein Befehl ausgeführt der den selben effekt wie ein Neustart hat.")
    EnvUpdate()
    EndFunc ;==>OnDelete

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

    Func OnExit()
    Exit
    EndFunc ;==>OnExit

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

    Func OnCreate()
    Local $Bild, $BildL, $hGraphicsImg, $hBitMap, $hImage, $X, $y, $Ba, $BMa1, $Bma, $nB, $nH

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

    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground") <> 1 Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground", "REG_DWORD", "1")
    MsgBox(0, "Info", "Registry-Wert wurde erstellt")
    If @error <> 0 Then
    MsgBox(16, "Fehler", "Registry-Wert konnte nicht erstellt werden!")
    EndIf
    Else
    MsgBox(0, "Info", "Registry-Wert exsistiert berits!")
    EndIf

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

    If FileExists(@HomeDrive & "\Windows\System32\oobe\info\backgrounds") Then
    MsgBox(4096, "Info", "Erforderliches Verzeichnis existiert bereits.")
    Else
    DirCreate(@HomeDrive & "\Windows\System32\oobe\info\backgrounds")
    MsgBox(4096, "Info", "Erforderliches Verzeichnis wurde erstellt.")
    EndIf
    $Bild = FileOpenDialog("Bitte Bild auswählen.", "@DesktopDir", "JPG-Bild (*.jpg;*.JPG)", 1)
    GUICreate( "Ausgewähltes Bild" )
    GUICtrlCreatePic( $Bild, -1, -1 )
    GUISetState()
    $Ba = MsgBox(36, "Frage", "Ist dass ihr Bild?")
    If $Ba = 7 Then
    While $Ba <> 6
    $Bild = FileOpenDialog("Bitte Bild auswählen.", "@DesktopDir", "Bild (*.bmp)", 1)
    GUICreate( "title" )
    GUICtrlCreatePic( $Bild, -1, -1 )
    GUISetState()
    $Ba = MsgBox(36, "Frage", "Ist dass ihr Bild?")
    WEnd
    EndIf
    _GDIPlus_Startup()
    $BildL = _GDIPlus_ImageLoadFromFile($Bild)
    $X = _GDIPlus_ImageGetWidth($BildL)
    $y = _GDIPlus_ImageGetHeight($BildL)
    If $X <> @DesktopWidth Or $y <> @DesktopHeight Then
    MsgBox(16, "Fehler", "Die Bildgrösse entspricht nicht der Dektopauflösung")
    $BMa1 = MsgBox(36, "Frage", "Wollen sie die Abmaße des Bildes ändern?")
    If $BMa1 = 6 Then
    $nB = InputBox( "Frage", "Bitte geben sie die neue Breite des Bildes ein." )
    $nH = InputBox( "Frage", "Bitte geben sie die neue Höhe des Bildes ein." )
    _ImageResize($Bild, @HomeDrive & "\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg", $nB, $nH)
    EnvUpdate()
    Else
    Exit
    EndIf
    If FileGetSize($Bild) > 262144 Then
    MsgBox(16, "Fehler", "Bild ist zu groß (über 256 KB).")
    Exit
    EndIf
    $BMa2 = MsgBox(36, "Frage", "Wollen sie die Abmaße des Bildes ändern?")
    If $BMa2 = 6 Then
    $nB = InputBox( "Frage", "Bitte geben sie die neue Breite des Bildes ein." )
    $nH = InputBox( "Frage", "Bitte geben sie die neue Höhe des Bildes ein." )
    _ImageResize($Bild, @HomeDrive & "\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg", $nB, $nH)
    _GDIPlus_ImageDispose ($Bild)
    Else
    _GDIPlus_ImageDispose ($Bild)
    FileCopy($Bild, @HomeDrive & "\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg", 1)
    If @error <> 0 Then
    MsgBox(16, "Fehler", "Bild kann nicht kopiert werden.")
    EndIf
    EndIf
    EnvUpdate()
    EndIfEndFunc ;==>OnCreate

    [/autoit]

    Downloads:
    Skript:
    autoit.de/wcf/attachment/8851/
    Include-Datei (für's Skalieren):
    autoit.de/wcf/attachment/8852/

    Habt ihr noch andere Vorschläge/gefundene Fehler? ;)

  • Hi Script-Bär,

    im Internet habe ich ein Win7 Wallpaper auf dem Desktopgespeichert (natürlich in meiner Auflösung), habe das in dein Tool eingebunden, abgemeldet und hat gefunzt.
    Das Tool finde ich sehr gut, denn es ist klein aber fein und ich habe im Internet auch mal danach gesucht habe das gemacht was da stand und es hatte trotzdem nicht gefunzt ;(
    aber dein Tool macht das alles sehr einfach, für das Tool würde ich sogar etwas advertising machen.

  • Funktioniert nur wenn man mit Windows 7 Computer Administrator angemeldet ist und dem Programm Adminrechte gewährt.
    Ist man mit einem normalen User angemeltet und startet das Programm als Admin klappt es nicht. Dennoch ein nettes Tool.

  • Funktioniert nur wenn man mit Windows 7 Computer Administrator angemeldet ist und dem Programm Adminrechte gewährt.
    Ist man mit einem normalen User angemeltet und startet das Programm als Admin klappt es nicht. Dennoch ein nettes Tool.


    Seit Win7 ist der AdministratorAccount automatisch deaktiviert... deswegen kommen ja auch immer diese bestätigungsfenster, wenn ein Programm AdminRechte benötigt....

  • Tach
    Ich habe es mal getestet...
    und habe bei der Skalierung diese Fehlermeldung bekommen

    Zitat

    AitoIt Error

    Line 31902 (File "C:\User\*******Desktop\AnmeldeBildschierm.exe"):

    Error: Variable used without being declared.

    Ich denke du sollstet dir das Skalierscript nochmal vornehmen ^^

    Naja, und beim Downloaden brach mir Antivir bei beiden Scripts eine virenmeldung...
    wohl eine fehlermeldung....

    Admin bin ich ^^
    habe Win7 Ultimate 64bit ^^ wen das was helfen sollt ^^

    Mfg Skilkor ^^

  • Zitat

    Compilier es mal ohne upx, oder schick das Scipt nach Avira.

    wzt meinst mit "Ohne UPX"???
    und wiso zu Avira? es ist doch kein Virus o. KeyLogger...aber es greift extern auf die registry zu oook... xD

    Oh und, es hat sich beim fehler posting ein Fehler untergebracht. es wahr nicht line 31902 sondern Line 3190 ^^ Sry

  • Hallo,

    Ich habe mir selber auch gerade einen Windows7 Logon Changer geschrieben und wollte mein Script mit deinem Script Version 2 vergleichen.

    Aber bevor ich das konnte musste ich noch eine EndIf in dein Script einbauen

    Dein Script
    [autoit]

    #cs ============================
    Name: Win7 Logon-Bild Wechsler
    Version: 2
    Datum: 11.4.2010
    Autor: Script-Bär
    #ce ;===========================

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

    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <skalieren.au3>
    #include <WinAPI.au3>
    #RequireAdmin
    #NoTrayIcon

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

    If @OSVersion <> "WIN_7" Then
    MsgBox(16, "Fehler", "Dein Betriebssystem ist nicht Windows 7.")
    Exit
    EndIf
    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    Global $ExitID

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

    _Main()

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

    Func _Main()
    Local $createID, $DeleteID
    GUICreate("Custom Msgbox", 300, 80)
    GUICtrlCreateLabel("Bitte wählen sie eine Aktion aus. ", 10, 10)
    GUICtrlCreateLabel("Aktueller Status: ", 10, 30)
    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground") = 1 Then
    GUICtrlCreateLabel(">Benutzerdifiniert< ", 100, 30)
    Else
    GUICtrlCreateLabel(">Standart< ", 100, 30)
    EndIf
    $createID = GUICtrlCreateButton("Anmeldebildschirm verändern.", 10, 50)
    GUICtrlSetOnEvent($createID, "OnCreate")
    $DeleteID = GUICtrlCreateButton("Standart wiederherstellen.", 170, 50)
    GUICtrlSetOnEvent($DeleteID, "OnDelete")
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd
    EndFunc ;==>_Main

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

    Func OnDelete()
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground")
    If @error = 0 Then
    MsgBox(16, "Fehler", "Registry-Wert konnte nicht gelöscht werden. Bitte manuell löschen." & @CRLF & "" & @CRLF & "Registry-Wert:" & @CRLF & "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background\OEMBackground")
    Else
    MsgBox(0, "Info", "Registry-Wert erfolgreich gelöscht.")
    EndIf
    MsgBox(48, "ACHTUNG!", "Nun wird ein Befehl ausgeführt der den selben effekt wie ein Neustart hat.")
    EnvUpdate()
    EndFunc ;==>OnDelete

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

    Func OnExit()
    Exit
    EndFunc ;==>OnExit

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

    Func OnCreate()
    Local $Bild, $BildL, $hGraphicsImg, $hBitMap, $hImage, $X, $y, $Ba, $BMa1, $Bma, $nB, $nH

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

    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground") <> 1 Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground", "REG_DWORD", "1")
    MsgBox(0, "Info", "Registry-Wert wurde erstellt")
    If @error <> 0 Then
    MsgBox(16, "Fehler", "Registry-Wert konnte nicht erstellt werden!")
    EndIf
    Else
    MsgBox(0, "Info", "Registry-Wert exsistiert berits!")
    EndIf

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

    If FileExists(@HomeDrive & "\Windows\System32\oobe\info\backgrounds") Then
    MsgBox(4096, "Info", "Erforderliches Verzeichnis existiert bereits.")
    Else
    DirCreate(@HomeDrive & "\Windows\System32\oobe\info\backgrounds")
    MsgBox(4096, "Info", "Erforderliches Verzeichnis wurde erstellt.")
    EndIf
    $Bild = FileOpenDialog("Bitte Bild auswählen.", "@DesktopDir", "JPG-Bild (*.jpg;*.JPG)", 1)
    GUICreate("Ausgewähltes Bild")
    GUICtrlCreatePic($Bild, -1, -1)
    GUISetState()
    $Ba = MsgBox(36, "Frage", "Ist dass ihr Bild?")
    If $Ba = 7 Then
    While $Ba <> 6
    $Bild = FileOpenDialog("Bitte Bild auswählen.", "@DesktopDir", "Bild (*.bmp)", 1)
    GUICreate("title")
    GUICtrlCreatePic($Bild, -1, -1)
    GUISetState()
    $Ba = MsgBox(36, "Frage", "Ist dass ihr Bild?")
    WEnd
    EndIf
    _GDIPlus_Startup()
    $BildL = _GDIPlus_ImageLoadFromFile($Bild)
    $X = _GDIPlus_ImageGetWidth($BildL)
    $y = _GDIPlus_ImageGetHeight($BildL)
    If $X <> @DesktopWidth Or $y <> @DesktopHeight Then
    MsgBox(16, "Fehler", "Die Bildgrösse entspricht nicht der Dektopauflösung")
    $BMa1 = MsgBox(36, "Frage", "Wollen sie die Abmaße des Bildes ändern?")
    If $BMa1 = 6 Then
    $nB = InputBox("Frage", "Bitte geben sie die neue Breite des Bildes ein.")
    $nH = InputBox("Frage", "Bitte geben sie die neue Höhe des Bildes ein.")
    _ImageResize($Bild, @HomeDrive & "\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg", $nB, $nH)
    EnvUpdate()
    Else
    Exit
    EndIf
    If FileGetSize($Bild) > 262144 Then
    MsgBox(16, "Fehler", "Bild ist zu groß (über 256 KB).")
    Exit
    EndIf
    $BMa2 = MsgBox(36, "Frage", "Wollen sie die Abmaße des Bildes ändern?")
    If $BMa2 = 6 Then
    $nB = InputBox("Frage", "Bitte geben sie die neue Breite des Bildes ein.")
    $nH = InputBox("Frage", "Bitte geben sie die neue Höhe des Bildes ein.")
    _ImageResize($Bild, @HomeDrive & "\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg", $nB, $nH)
    _GDIPlus_ImageDispose($Bild)
    Else
    _GDIPlus_ImageDispose($Bild)
    FileCopy($Bild, @HomeDrive & "\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg", 1)
    If @error <> 0 Then
    MsgBox(16, "Fehler", "Bild kann nicht kopiert werden.")
    EndIf
    EndIf
    EnvUpdate()
    EndIf ;Von mir eingefügt
    EndFunc ;==>OnCreate

    [/autoit]

    Kannst du vielleicht in deinem Post der Version 2 ändern, damit Benutzer die das benutzen wollen kein Problem haben :)

    Lg, Fabian