Reg schreiben, Prüfen ob ok, Neustarten, und zum test wenn er hochgefahren ist notepad aufrufen

  • hallo

    habe oben genanntes prob und egal was ich mache er sagt immer das die reg nicht ausgeführt werden kann bzw zeile 16 nicht stimmig ist.

    helft mir bitte.

    Spoiler anzeigen

    Einmal editiert, zuletzt von Kamin (9. September 2009 um 16:48)

  • die variablen $ein und $aus sind an der falschen stelle deklariert. weiter habe ich dein script nicht durchlaufen lassen. beim überfliegen sind mir aber noch andere dim's begegnet, die dort nicht hinpassten.

    Zitat

    Dim = Lokaler Gültigkeitsbereich, wenn der Variabelenname global nicht existiert (falls dies der Fall ist, wird die globale Variable verwendet!)
    Global = Erzwingt globale Gültigkeit der Variablen
    Local = Erzwingt lokale Gültigkeit der Variablen, bzw. innerhalb der Funktion

    zeile 16 ist eigtl korrekt du könntest es als variable deklarieren oder den pfad gleich direkt eingeben. (bei mir traten dort keine fehler auf)

    wieso steht in zeile 46 ein then ohne if oder habe ich etwas übersehen?

  • weil ich versucht habe das prob mit hilfe von if ....... then in den griff zu bekommen.

    und wieso treten da keine fehler bei dir auf und bei mir schon?

  • Hallo Kamin,

    hab dein Skript mal kurz getestet und Änderungen mit ;<=========== gekennzeichnet

    Spoiler anzeigen
    [autoit]

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

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

    AutoIt Version: 3.3.1.1 (beta)
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------
    ;~ Optionen setzen
    Opt("WinTitleMatchMode", 2)
    Opt("SendKeyDelay", 100)

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

    Global $search = FileExists(@StartupDir & "\autoitscriptneustart.lnk") ;<===========
    ;MsgBox(0, "", "", $search)

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

    Global $neustart = @ScriptDir & "\neustart.txt" ;Nachdem Rebootet wurde

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

    If FileExists($neustart) Then ;Das ließt er ein wenn der PC rebootet hat!
    $fso = FileOpen($neustart, 0)
    $value = FileReadLine($fso)
    FileClose($fso)
    FileDelete($neustart)
    FileDelete(@StartupDir & "\autoitscriptneustart.lnk")
    Switch $value
    Case "Nachneustart1"
    Nachneustart1()
    Case Else
    Exit 5
    EndSwitch
    Else
    Main()
    EndIf
    Exit

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

    ;Ändern der UAC!

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

    ;Dim $EIN = 0x00000001 ;<=========== wird nie verwendet, daher auskommentiert

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

    Func Main() ;Das wird die Neustartdatei nachdem die Regestry umgestellt und die Messagebox ein ok gibt!
    Local $AUS = 0x00000000 ;<=========== falls nicht öfters benötigt ist hier die passenste Stelle

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

    ;<=========== hier ein IF eingefügt, da für Then benötigt
    If RegWrite("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System", "EnableLUA", "REG_DWORD", $AUS) Then ;Regestrycode zum ändern der UAC!
    $result = MsgBox("48", "Message", "Achtung! in 10 Sec. wird der PC neugestartet!" &@CRLF & "Oder OK drücken für sofirtigen Neustart.",10) ;Bei Bestätigung der MSG wird eine neustartdatei geschrieben!
    EndIf ;<=========== abschliessendes EndIf für obiges IF ... Then
    ConsoleWrite($result)
    If $result <= 1 Then ;<===========TimeOut liefert 0
    CreateRestart("Nachneustart1")
    ;Send("{ENTER}") ;<=========== durch TimeOut unnötig
    Main2()
    Exit 0
    EndIf
    EndFunc ;==>Main

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

    ; Hier wird der RestartPrüfpunkt gesetzt
    Func CreateRestart($Nachneustart1)
    $fso = FileOpen($neustart, 2)
    FileWriteLine($fso, $Nachneustart1)
    FileClose($fso)
    FileCreateShortcut(@ScriptFullPath, @StartupDir & "\autoitscriptneustart.lnk", @ScriptDir)
    EndFunc ;==>CreateRestart

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

    ; Prüfen, ob die Datei in autostart gepackt wurde!
    Func Main2()
    Sleep(3000)
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
    Exit
    EndIf
    While 1
    $file = FileExists($search)
    If @error Then ExitLoop
    Shutdown(2)
    MsgBox(4096, "Gefunden!", $file)
    WEnd
    ; Handle für Suche schliessen
    FileClose($search)
    EndFunc ;==>Main2

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

    Func Nachneustart1() ;Was der PC nach dem Reboot machen soll!
    If ControlShow("Trayclockwclass", "", 303) Then
    Sleep(6000)
    MsgBox(0,"","Notepad würde gestartet") ; <=================
    ;Run("notepad.exe")
    EndIf
    Exit 0
    EndFunc ;==>Nachneustart1

    [/autoit]

    Edit: In MsgBox für Restart TimeOut eingefügt und dadurch nötige Änderungen durchgeführt

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (8. September 2009 um 08:58)

  • boar vielen vielen dank

    aber ich hab auch einen fehler gefunden ^^

    zwischen zeile 18 und 33 ist die verbindung vom IF zum Endif getrennt deswegen startet er nicht nach dem reboot die aufgabe ;)

  • Hallo Kamin,

    ich habe das Skript noch einmal überarbeitet und zusätzliche MSGBOXen eingefügt (zwecks Kontrolle, können gelöscht werden). Dieses Skript läuft bei mir mit 2 Einschränkungen:

    • Der Regschlüssel wird nicht geschrieben
    • Das Notepad wird nicht gestartet, da ControlShow bei mir nicht funktioniert.

    System WinXP SP3
    AutoIt 3.3.0.0

    teste es einfach einmal durch. Den Fehler den du beschrieben hast kann ich an dieser Stelle, wo du in vermutest in meinem heute morgen geposteten Skript nicht finden,

    Spoiler anzeigen
    [autoit]

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

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

    AutoIt Version: 3.3.1.1 (beta)
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------
    ;~ Optionen setzen
    Opt("WinTitleMatchMode", 2)
    Opt("SendKeyDelay", 100)

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

    ;ConsoleWrite(@StartupDir & @CRLF)

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

    Global $search = FileExists(@StartupDir & "\autoitscriptneustart.lnk") ;<===========
    ;MsgBox(0, "", "", $search) ;<===========

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

    Global $neustart = @ScriptDir & "\neustart.txt" ;Nachdem Rebootet wurde

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

    If FileExists($neustart) Then ;Das ließt er ein wenn der PC rebootet hat!
    $fso = FileOpen($neustart, 0)
    $value = FileReadLine($fso)
    FileClose($fso)
    FileDelete($neustart)
    FileDelete(@StartupDir & "\autoitscriptneustart.lnk")
    ;MsgBox(0,"Value: ",$value) ;<=========== wieder löschen
    Switch $value
    Case "Nachneustart1"
    Nachneustart1()
    Case Else
    Exit 5
    EndSwitch
    Else
    Main()
    EndIf
    Exit

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

    ;Ändern der UAC!

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

    ;Dim $EIN = 0x00000001 ;<=========== wird nie verwendet, daher auskommentiert

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

    Func Main() ;Das wird die Neustartdatei nachdem die Regestry umgestellt und die Messagebox ein ok gibt!
    Local $AUS = 0x00000000 ;<=========== falls nicht öfters benötigt ist hier die passenste Stelle

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

    ;<=========== hier ein IF eingefügt, da für Then benötigt
    ; If RegWrite("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System", "EnableLUA", "REG_DWORD", $AUS) = 1 Then ;Regestrycode zum ändern der UAC! ;<=========== auf Erfolg prüfen (klappt bei mir nicht)
    If RegWrite("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System", "EnableLUA", "REG_DWORD", $AUS) Then ;Regestrycode zum ändern der UAC! ;<=========== ohne Prüfung
    $result = MsgBox("48", "Message", "Achtung! in 10 Sec. wird der PC neugestartet!" &@CRLF & "Oder OK drücken für sofirtigen Neustart.",10) ;Bei Bestätigung der MSG wird eine neustartdatei geschrieben!
    EndIf ;<=========== abschliessendes EndIf für obiges IF ... Then
    ;ConsoleWrite($result)
    If $result <= 1 Then ;<===========TimeOut liefert 0
    CreateRestart("Nachneustart1")
    ;Send("{ENTER}") ;<=========== durch TimeOut unnötig
    Main2()
    Exit 0
    EndIf
    EndFunc ;==>Main

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

    ; Hier wird der RestartPrüfpunkt gesetzt
    Func CreateRestart($Nachneustart1)
    $fso = FileOpen($neustart, 2)
    FileWriteLine($fso, "Nachneustart1") ;<=========== da später auf diesen Text geprüft wird
    FileClose($fso)
    FileCreateShortcut(@ScriptDir & "\" & @ScriptName, @StartupDir & "\autoitscriptneustart.lnk", @ScriptDir)
    EndFunc ;==>CreateRestart

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

    ; Prüfen, ob die Datei in autostart gepackt wurde!
    Func Main2()
    ;Sleep(3000)
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
    Exit
    EndIf
    While 1
    $file = FileExists($search)
    If @error Then ExitLoop
    MsgBox(4096, "Gefunden!", $file,20)
    Shutdown(2) ;<=========== wieder aktivieren
    WEnd
    ; Handle für Suche schliessen
    ;FileClose($search) ;<=========== FileExists gibt kein FileHandle zurück daher unnötig, schädlich?????
    EndFunc ;==>Main2

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

    Func Nachneustart1() ;Was der PC nach dem Reboot machen soll!
    MsgBox(0,"Nachneustart1","die func wird ausgeführt",20) ;<================= das klappt
    If ControlShow("Trayclockwclass", "", 303) Then ;<================= hier läuft bei mir etwas schief
    ;Sleep(6000)
    MsgBox(0,"","Notepad würde gestartet",10) ;<=================
    ;Run("notepad.exe")
    EndIf
    Exit 0
    EndFunc ;==>Nachneustart1

    [/autoit]

    Edit: Skript eingefügt

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (8. September 2009 um 14:52)

  • ich hab dein erstes script auch überarbeitet und es arbeitet jetz alles außer das der nach dem neustart das script aufruft

  • also meiner macht das popup dann schreibt er die neustart dann startet er neu nach dem er diedatei gefunden hat in autostart, fährt hoch aber dann macht der nur noch das scrript auf aber öffnet mir nicht meine msgbox

    hier jetz noch mal meins

    Spoiler anzeigen
  • Hallo kamin,

    ich habe das Skript aus #10 noch einmal überarbeitet, läuft bei mir wunderbar bis zur letzten MsgBox durch

    Spoiler anzeigen
    [autoit]

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

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

    AutoIt Version: 3.3.1.1 (beta)
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------
    ;~ Optionen setzen
    Opt("WinTitleMatchMode", 2)
    Opt("SendKeyDelay", 100)

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

    Global $search = FileExists(@StartupDir & "\autoitscriptneustart.lnk") ;<===========
    ;MsgBox(0, "", "", $search)

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

    Global $neustart = @ScriptDir & "\neustart.txt" ;Nachdem Rebootet wurde

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

    If FileExists($neustart) Then ;Das ließt er ein wenn der PC rebootet hat!

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

    $fso = FileOpen($neustart, 0)
    $value = FileReadLine($fso)
    FileClose($fso)
    FileDelete($neustart)
    FileDelete(@StartupDir & "\autoitscriptneustart.lnk")

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

    Switch $value
    Case "Nachneustart1" ;Wenn der PC das findet startet er Notepad.exe und gibt eine Message raus
    Nachneustart1()

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

    Case Else
    Exit 5
    EndSwitch
    Else
    Main()
    EndIf
    Exit

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

    ;Ändern der UAC!

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

    ;Dim $EIN = 0x00000001 ;<=========== wird nie verwendet, daher auskommentiert

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

    Func Main() ;Das wird die Neustartdatei nachdem die Regestry umgestellt und die Messagebox ein ok gibt!

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

    Local $AUS = 0x00000000 ;<=========== falls nicht öfters benötigt ist hier die passenste Stelle

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

    ;Regestrycode zum ändern der UAC!

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

    ; If RegWrite("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System", "EnableLUA", "REG_DWORD", $AUS) = 1 Then ;Regestrycode zum ändern der UAC! ;<=========== auf Erfolg prüfen (klappt bei mir nicht)
    If RegWrite("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System", "EnableLUA", "REG_DWORD", $AUS) Then ;Regestrycode zum ändern der UAC! ;<=========== ohne Prüfung

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

    ;Bei Bestätigung der MSG wird eine neustartdatei geschrieben!
    ;@CRLF ist für den Zeilenumbruch in der MessageBox
    ;Der 3. Parameter (=10) isz zuständig für das schliessen der MessageBox
    $result = MsgBox("48", "Message", "Achtung! in 10 Sec. wird der PC neugestartet!" &@CRLF & "Oder OK drücken für sofortigen Neustart.",1)
    EndIf

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

    ConsoleWrite($result) ;wenn beantwortet dann wird hier angefangen die Nachneustart1.txt zu schreiben!
    If $result <= 1 Then ;<===========TimeOut liefert 0
    CreateRestart("Nachneustart1")
    ;Send("{ENTER}") ;<=========== durch TimeOut unnötig
    Main2()
    Exit 0

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

    EndIf
    EndFunc ;==>Main

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

    ; Hier wird der RestartPrüfpunkt gesetzt
    Func CreateRestart($Nachneustart1)
    $fso = FileOpen($neustart, 2)
    FileWriteLine($fso, $Nachneustart1)
    FileClose($fso)
    FileCreateShortcut(@ScriptFullPath, @StartupDir & "\autoitscriptneustart.lnk", @ScriptDir)
    EndFunc ;==>CreateRestart

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

    ; Prüfen, ob die Datei in autostart gepackt wurde!
    Func Main2()
    Sleep(3000)
    If $search = -1 Then ;Wenn datei nicht gefunden gibt er Mesasage aus!
    MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
    Exit
    EndIf
    ; While 1
    $file = FileExists($search) ;Wenn gefunden dann hört der PC auf zu suchen und startet den neustart
    ;If @error Then ExitLoop
    Shutdown(2)

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

    ; WEnd
    ; Handle für Suche schliessen
    ;FileClose($search) ;<=========== FileExists gibt kein FileHandle zurück daher unnötig, schädlich?????
    EndFunc ;==>Main2

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

    Func Nachneustart1() ;Was der PC nach dem Reboot machen soll!
    ;If ($neustartdelete) = 1 then ;<=========== wo deklarierst du den diese Variable und wo weist du ihr den Wert 1 zu?????
    MsgBox (0,"ich bin auf","test")
    ;$gestartet = Run("notepad.exe")
    ;MsgBox(0,"","Notepad würde gestartet",$gestartet) ; <=================
    #cs
    Else
    MsgBox (0,"Fehler","Es klappt nicht")
    EndIf
    #ce
    Exit 0
    EndFunc ;==>Nachneustart1

    [/autoit]

    mfg (Auto)Bert

    PS: Nein ich habe kein ICQ und komme aus der Ecke, wo es den besten Wein gibt