Hallo allerseist, meine nächste Frage:
Wie kann ich ein Skript sich selbst neustarten lassen, ohne dabei ein externes Skript zu benutzen
( wie z.B. Run("..."))
Ist das möglich
Einen schönen Tag noch!
Und (hoffentlich) ein schönes Wochende!
Hallo allerseist, meine nächste Frage:
Wie kann ich ein Skript sich selbst neustarten lassen, ohne dabei ein externes Skript zu benutzen
( wie z.B. Run("..."))
Ist das möglich
Einen schönen Tag noch!
Und (hoffentlich) ein schönes Wochende!
Vielleicht ist es einfacher, wenn du erklärst, wozu das Skript neu aufgerufen werden soll.
Ich vermute, Einstellungen für das Skript werden geändert und zur Wirksamkeit soll das Skript damit neu starten?
Wenn dem so ist, solltest du diese Parameter in einer Funktion setzen und einfach die Funktion dann aufrufen.
Gut danke! Genau so wars
Aber ist das generell möglich?
Hi,
hier mal ein Bsp.
Der User ändert die Hintergrundfarbe, diese wird sofort übernommen und ist dann auch weiterhin (nach neuem Starten) gültig.
Du kannst natürlich viel mehr Parameter dort hinterlegen.
Global $INI = @ScriptDir & '\meine.ini'
If Not FileExists($INI) Then
IniWrite($INI, 'start', 'guiCol', '0xf0000f')
EndIf
Global $guiBkCol = IniRead($INI, 'start', 'guiCol', '0xf0000f')
$gui = GUICreate('Test')
$lb = GUICtrlCreateLabel('Neue Hintergrundfarbe als Hex(0xff00ff)', 10, 10, 200)
$in = GUICtrlCreateInput('', 10, 35, 80)
$bt = GUICtrlCreateButton('Einstellung setzen', 110, 35, 100, 20)
GUISetState()
_Settings()
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg()
Switch $msg
Case -3
Exit
Case $bt
If GUICtrlRead($in) <> '' Then
$guiBkCol = '0x' & Hex(GUICtrlRead($in))
IniWrite($INI, 'start', 'guiCol', $guiBkCol)
_Settings()
EndIf
EndSwitch
WEnd
Func _Settings()
If $guiBkCol Then GUISetBkColor($guiBkCol, $gui)
EndFunc
Dankeschön!
Auch wenn das Problem gelöst ist , ich benutze immer folgendes wenn das Programm sich selber neu starten soll.
MsgBox(0,"","")
[/autoit] [autoit][/autoit] [autoit]_SelfRun()
[/autoit] [autoit][/autoit] [autoit]Func _SelfRun($iDelay = 0)
Local $sCmdFile,$hTmpFile
FileDelete(@ScriptDir & "\scratch.bat")
$hTmpFile= FileOpen(@ScriptDir & "\scratch.bat",2)
$sCmdFile = 'ping -n ' & $iDelay & ' 127.0.0.1 > nul' & @CRLF _
& @ComSpec & ' /c '&@ScriptFullPath&@CRLF _
& 'del ' & @ScriptDir & '\scratch.bat'
FileWrite($hTmpFile, $sCmdFile)
FileClose($hTmpFile)
Run(@ScriptDir & "\scratch.bat", @TempDir, @SW_HIDE)
Exit
EndFunc
Funktioniert aber nur mit der Compilierten Datei .
Edit hatte noch en Fehler drin, is jetzt angepaßt.
Was spricht gegen folgendes Script?
[autoit]Func _restart()
Run(@ScriptFullPath)
Exit
EndFunc
Das ist auch gut. Hat aber den Nachteil, wenn das Script nur in einer Instanz laufen darf, das es dort nicht funktioniert .
sorry für OT, aber ich muss mich grad kringeln vor lachen, wo ich raupis sig lesen =)
So gehts auch, is wenig aufwand und das script is schnell wieder neu gestartet.
(Script 1 soll durch Script 2 neu gestartet werden)
Script 1:
[autoit]Sleep (750)
Run ($dir & "\NewStart.exe")
Exit
Script 2.
[autoit]$dir = @ScriptDir
Sleep (500)
Run ($dir & "\To-Do Checkbox.exe")
Exit
Wie kann ich ein Skript sich selbst neustarten lassen, ohne dabei ein externes Skript zu benutzen
@Commander21:
deine idee ist nicht blöd, du solltest dir nur mal den ersten post durchlesen^^
Padmak
Also, damit sollte man das Skript immer neustarten können, sogar mit originaler Kommandozeile:
(Wenn man _Singleton verwendet, sollte wie im Beipiel das auf 2 Zeilen aufteilen.)
#include <Misc.au3>
[/autoit] [autoit][/autoit] [autoit]$Mutex = _Singleton("sdfsghgdjfhgdjkhgkdfj",1)
If $Mutex=0 Then Exit
If MsgBox(4, '', "Neustart?") = 6 Then _Restart($Mutex)
[/autoit] [autoit][/autoit] [autoit]; $hMutex : wenn _Singleton verwendet wird, der Rückgabewert von _Singleton mit $Flag = 1.
Func _Restart($hMutex=0)
; Prog@ndy
If $hMutex Then DllCall("kernel32.dll","int", "ReleaseMutex","ptr",$hMutex)
AutoItWinSetTitle("THISWILLCLOSE")
Sleep(100)
ShellExecute(@AutoItExe,$CMDLINERAW,@WorkingDir)
Exit
EndFunc
Danke für eure rege Beteiligung, ich glaube jetzt hab ich genug Ideen für's nächste Mal