Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Auf Prozessende warten und dann herunterfahren



  • Please log in to reply
40 replies to this topic
CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Hallo liebe Mitstreiter,

 

ich möchte zuerst die automatische Bereinigung mit dem ccleaner durchführen und anschließend den PC herunterfahren.

Allerdings wartet ja --- Process, WaitClose --- nicht auf das Ende des Prozesses, so wie es der Name darlegen würde.

Wie könnte man es ansonsten lösen? Es soll nur gewartet werden bis sich der ccleaner Prozess selbst beendet hat ( -- /Auto -- ) und anschließend soll shutdown ausgeführt werden.
 

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
Run, C:\Program Files\CCleaner\CCleaner.exe /Auto, , ; Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen
Process, WaitClose, CCleaner.exe ; wartet darauf das der Process beendet ist
Run, %comspec% /c shutdown -s -f -t 0, , Hide ; fuehre die Konsole (cmd) versteckt (, "Arbeitsverzeichniss", Hide) aus und fahre den PC herunter, kille alle laufenden Prozesse sofort (Schalter /f)

/*

###########################################################
shutdown -s -f -t 0

Dabei bewirkt -s das Herunterfahren, -f erzwingt das Schließen ausgeführter Anwendungen ohne Warnung
und -t gibt das Zeitlimit für das Herunterfahren an, t 0 = 0 Sekunden, also sofort!

Syntax: shutdown [-l | -s | -r | -a] [-f] [-m \\Computer] [-t xx]
[-c "Kommentar"] [-d up:xx:yy]

Keine Argumente Zeigt diese Meldung an (wie -?).
-i Zeigt eine grafische Benutzeroberfläche an (muss die erste Option sein).
-l Abmelden (kann nicht mit der Option -m verwendet werden).
-s Fährt den Computer herunter.
-r Fährt den Computer herunter und startet ihn neu.
-a Bricht das Herunterfahren des Systems ab.
-m \\Computer Remotecomputer zum Herunterfahren/Neustarten/Abbrechen.
-t xx Zeitlimit für das Herunterfahren, in xx Sekunden.
-c “Kommentar” Kommentar für das Herunterfahren (maximal 127 Zeichen).
-f Erzwingt das sofortige Schließen offener Anwendungen ohne Warnung.
-d [u][p]:xx:yy Grund (Code) für das Herunterfahren:
u = Benutzercode
p = Code für geplantes Herunterfahren
xx = Hauptgrund (positive ganze Zahl kleiner als 256)
yy = Weiterer Grund (positive ganze Zahl kleiner als 65536)
###########################################################


###########################################################
CCleaner.exe /AUTO
Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen.
Es wird das Traysymbol angezeigt und Ballontipps werden eingeblendet

CCleaner.exe /AUTO /SHUTDOWN
Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen.
Dann wird Windows automatisch heruntergefahren. Es muss der Befehl / AUTO vorangestellt sein.
Das Problem Prozesse werden nicht gekillt, sondern es wird gewartet bis die Prozesse beendet wurden
(per Windows Default sind das 30 Sekunden)

Die Lösung: ein Shutdown Batchbefehl der anschliessend ausgefuehrt wird
###########################################################

*/




Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

Wenn dir eine Schleife Recht ist...

	Loop { 
		Process, Exist, CCleaner.exe
		Sleep, 1000
	} Until !ErrorLevel

	Run, C:\Windows\System32\shutdown.exe /s /f /t 60,,Hide

oder lieber ein Timer...

	SetTimer, Shutdown, 1000
	
	Shutdown:
		Process, Exist, CCleaner.exe
		If !ErrorLevel
			Run, C:\Windows\System32\shutdown.exe /s /f /t 60,,Hide
	Return

All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Hallo Seidenweber,

 

eine Schleife ist perfekt für mich, vielen Dank.

Ich wünsche noch einen schönen Sonntag...

 

Hier noch mal das fertige Script, -t 60 würde ich übrigens nicht verwenden wollen.

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
Run, C:\Program Files\CCleaner\CCleaner.exe /Auto, , ; Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen

Loop { ; Schleife ausfuehren um zu pruefen, ob der ccleaner laeuft
Process, Exist, CCleaner.exe
Sleep, 1000 ; warte 1 Sekunde
} Until !ErrorLevel  ; fuehre die Schleife aus bis der ccleaner Process nicht mehr gefunden wird
 
Run, %comspec% /c shutdown -s -f -t 0, ,Hide ; fuehre die Konsole (cmd) versteckt (, "Arbeitsverzeichniss", Hide) aus und fahre den PC herunter, kille alle laufenden Prozesse sofort (Schalter -f)


/*

###########################################################
shutdown -s -f -t 0

Dabei bewirkt -s das Herunterfahren, -f erzwingt das Schließen ausgeführter Anwendungen ohne Warnung
und -t gibt das Zeitlimit für das Herunterfahren an, t 0 = 0 Sekunden, also sofort!

Syntax: shutdown [-l | -s | -r | -a] [-f] [-m \\Computer] [-t xx]
[-c "Kommentar"] [-d up:xx:yy]

Keine Argumente Zeigt diese Meldung an (wie -?).
-i Zeigt eine grafische Benutzeroberfläche an (muss die erste Option sein).
-l Abmelden (kann nicht mit der Option -m verwendet werden).
-s Fährt den Computer herunter.
-r Fährt den Computer herunter und startet ihn neu.
-a Bricht das Herunterfahren des Systems ab.
-m \\Computer Remotecomputer zum Herunterfahren/Neustarten/Abbrechen.
-t xx Zeitlimit für das Herunterfahren, in xx Sekunden.
-c “Kommentar” Kommentar für das Herunterfahren (maximal 127 Zeichen).
-f Erzwingt das sofortige Schließen offener Anwendungen ohne Warnung.
-d [u][p]:xx:yy Grund (Code) für das Herunterfahren:
u = Benutzercode
p = Code für geplantes Herunterfahren
xx = Hauptgrund (positive ganze Zahl kleiner als 256)
yy = Weiterer Grund (positive ganze Zahl kleiner als 65536) 
###########################################################


###########################################################
CCleaner.exe /AUTO
Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen.
Es wird das Traysymbol angezeigt und Ballontipps werden eingeblendet

CCleaner.exe /AUTO /SHUTDOWN
Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen.
Dann wird Windows automatisch heruntergefahren. Es muss der Befehl / AUTO vorangestellt sein.
Das Problem Prozesse werden nicht gekillt, sondern es wird gewartet bis die Prozesse beendet wurden 
(per Windows Default sind das 30 Sekunden)

Die Lösung: ein Shutdown Batchbefehl der anschliessend ausgefuehrt wird
###########################################################

*/



HotKeyIt
  • Moderators
  • 7439 posts
  • Last active: Jun 22 2016 09:14 PM
  • Joined: 18 Jun 2008

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
Run, C:\Program Files\CCleaner\CCleaner.exe /Auto, , ; Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen
Process, Wait, CCleaner.exe
Process, WaitClose, CCleaner.exe
Run, %comspec% /c shutdown -s -f -t 0, ,Hide ; fuehre die Konsole (cmd) versteckt (, "Arbeitsverzeichniss", Hide) aus und fahre den PC herunter, kille alle laufenden Prozesse sofort (Schalter -f)


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Danke HotKeyIt,

 

das hatte ich aber gestern auch schon getestet, bevor ich meine Frage im Forum gestellt habe. Das funktioniert nicht!
Nachher hatte ich dann ja nur noch --- Process, WaitClose, CCleaner.exe ---, siehe meinen 1. Post

Process, Wait, CCleaner.exe
Process, WaitClose, CCleaner.exe

Der Shutdownprocess wird dann nahezu paralell ausgeführt, und es wird nicht auf den ccleaner gewartet.



CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Verfeinerte Version, mit kurzer Pause
ccleaner und shutdown für 32 und 64 bit Systeme:

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
If (FileExist("C:\Program Files\CCleaner\CCleaner64.exe")) ;  Pruefe ob es sich um ein 64 bit System handelt
{
Run, C:\Program Files\CCleaner\CCleaner64.exe /Auto, , ; Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen

Sleep, 15000 ; warte 15 Sekunden, da die Bereinigung auch auf schnellen Systemen einige Sekunden dauert

Loop { ; Schleife ausfuehren um zu pruefen, ob der ccleaner laeuft
Process, Exist, CCleaner64.exe ; prueft ob der ccleaner noch laeuft
Sleep, 1000 ; warte 1 Sekunde
} Until !ErrorLevel  ; fuehre die Schleife aus bis der CCleaner64.exe Process nicht mehr gefunden wird
 
Run, C:\Windows\System32\shutdown.exe /s /f /t 0,,Hide ; fuehre shutdown.exe versteckt (, "Arbeitsverzeichniss", Hide) aus und fahre den PC herunter, beende alle laufenden Prozesse sofort (Schalter /f), zeige keinen Dialog an und warte nicht mit dem Herunterfahren (Schalter: /t 0  =  0 Sekunden)
}

Else ; wenn CCleaner64.exe nicht gefunden wird, handelt es sich offenbar um ein 32 bit System, also nachfolgende Befehle ausfuehren

{
Run, C:\Program Files\CCleaner\CCleaner.exe /Auto, , ; Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen

Sleep, 15000 ; warte 15 Sekunden, da die Bereinigung auch auf schnellen Systemen einige Sekunden dauert

Loop { ; Schleife ausfuehren um zu pruefen, ob der ccleaner laeuft
Process, Exist, CCleaner.exe ; prueft ob der ccleaner noch laeuft
Sleep, 1000 ; warte 1 Sekunde
} Until !ErrorLevel  ; fuehre die Schleife aus bis der ccleaner Process nicht mehr gefunden wird
 
Run, C:\Windows\System32\shutdown.exe /s /f /t 0,,Hide ; fuehre shutdown.exe versteckt (, "Arbeitsverzeichniss", Hide) aus und fahre den PC herunter, beende alle laufenden Prozesse sofort (Schalter /f), zeige keinen Dialog an und warte nicht mit dem Herunterfahren (Schalter: /t 0  =  0 Sekunden)
}



/*

###########################################################
shutdown -s -f -t 0

Dabei bewirkt -s das Herunterfahren, -f erzwingt das Schließen ausgeführter Anwendungen ohne Warnung
und -t gibt das Zeitlimit für das Herunterfahren an, t 0 = 0 Sekunden, also sofort! Ohne Zeitangabe wird der Standart: 30 Sekunden ausgefuehrt

Syntax: shutdown [-l | -s | -r | -a] [-f] [-m \\Computer] [-t xx]
[-c "Kommentar"] [-d up:xx:yy]

Keine Argumente Zeigt diese Meldung an (wie -?).
-i Zeigt eine grafische Benutzeroberfläche an (muss die erste Option sein).
-l Abmelden (kann nicht mit der Option -m verwendet werden).
-s Fährt den Computer herunter.
-r Fährt den Computer herunter und startet ihn neu.
-a Bricht das Herunterfahren des Systems ab.
-m \\Computer Remotecomputer zum Herunterfahren/Neustarten/Abbrechen.
-t xx Zeitlimit für das Herunterfahren, in xx Sekunden, wenn groesser als 0 wird ein Fenster mit der Herunterfahren-Meldung eingeblendet
-c “Kommentar” Kommentar für das Herunterfahren (maximal 127 Zeichen).
-f Erzwingt das sofortige Schließen offener Anwendungen ohne Warnung.
-d [u][p]:xx:yy Grund (Code) für das Herunterfahren:
u = Benutzercode
p = Code für geplantes Herunterfahren
xx = Hauptgrund (positive ganze Zahl kleiner als 256)
yy = Weiterer Grund (positive ganze Zahl kleiner als 65536)
###########################################################


###########################################################
CCleaner.exe /AUTO
Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen.
Es wird das Traysymbol angezeigt und Balloon-Tipps werden eingeblendet

CCleaner.exe /AUTO /SHUTDOWN
Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen.
Es wird das Traysymbol angezeigt und Balloon-Tipps werden eingeblendet
Dann wird Windows automatisch heruntergefahren. Es muss der Befehl / AUTO vorangestellt sein.
Das Problem Prozesse werden nicht gekillt, sondern es wird gewartet bis die Prozesse beendet wurden
(per Windows Default sind das 30 Sekunden)

Die Loesung: ein Shutdown Batchbefehl der anschliessend ausgefuehrt wird
###########################################################

*/




Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

'Eigentlich' wollte ich ja nur sagen, dass die Variante von HotKeyIt bei dir laufen 'müsste'.

 

Aber weil's so schön ist, habe ich auch deine verfeinerte Version nochmal auf das Notwendige eingedampft:

    #NoTrayIcon
    CCleaner := A_Is64bitOS ? "ccleaner64.exe" : "ccleaner.exe"
    Run, %A_ProgramFiles%\CCleaner\%CCleaner% /Auto
    Sleep, 15000
    SetTimer, Shutdown, 1000
    Return

    Shutdown:
        Process, Exist, %CCleaner%
        If !ErrorLevel
            Run, %comspec% /c shutdown -s -f -t 0,, Hide
    Return

All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Hallo Seidenweber,

 

Danke das Du Dich nicht auf "Eigentlich" beschränkt hast ;-)
Das sieht wirklich sehr effizient aus.

Ich werde es direkt übernehmen...



CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Hallo Seidenweber,

 

leider funktioniert Deine Timerversion (bei mir) nicht. So aber läuft es, ist ja nur eine leichte Abwandlung, die auf Deinem ersten Vorschlag basiert:
 

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
CCleaner := A_Is64bitOS ? "ccleaner64.exe" : "ccleaner.exe" ; Variable prueft ob die ccleaner64.exe oder die ccleaner.exe vorhanden ist, ccleaner64.exe gibt es nur bei 64 bit Systemen
Run, %A_ProgramFiles%\CCleaner\%CCleaner% /Auto ; CCleaner im Programmverzeichnis (= C:\Program Files) ausfuehren und die gefundene 64 oder 32 Bit Version starten
Sleep, 5000 ; warte 5 Sekunden, da die Bereinigung auch auf schnellen Systemen einige Sekunden dauert
	
Loop 
	{ ; Schleife ausfuehren um zu pruefen, ob der ccleaner laeuft
	Process, Exist, %CCleaner% ; prueft ob der ccleaner noch laeuft
	Sleep, 1000 ; warte 1 Sekunde
	} 
	
Until !ErrorLevel  ; setze die Schleife fort bis der ccleaner Prozess nicht mehr gefunden wird und fuehre den nachfolgenden Befehl aus
	
Run, C:\Windows\System32\shutdown.exe /s /f /t 0, ,Hide ; fuehre shutdown.exe versteckt (, "Arbeitsverzeichniss" , Hide) aus und fahre den PC herunter (Schalter /s), beende alle laufenden Prozesse sofort (Schalter /f), zeige keinen Dialog an und warte nicht mit dem Herunterfahren (Schalter: /t 0  =  0 Sekunden)

Return

Ob das Return am Ende noch notwendig ist, entzieht sich allerdings meiner Kenntniss.
Ich habe auch Deinen Vorschlag zum Start des Shutdown Prozesses wieder verwendet, da der Direktaufruf wahrscheinlich weniger Sicherheitsabfragen verursacht.



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

leider funktioniert Deine Timerversion (bei mir) nicht.

Was'n da los bei dir? happy.png

 

Ob das Return am Ende noch notwendig ist, entzieht sich allerdings meiner Kenntniss.

Bei diesem Script nicht, weil es a) das definitive Ende ist und selbst wenn nicht, wäre b) shutdown.exe der ultimative Killer.

Das erste freistehende Return kennzeichnet das Ende des Teils, der beim Start automatisch ausgeführt wird. Danach würde man Label, Hotkeys usw. definieren.

 

;Variable prueft ob die ccleaner64.exe oder die ccleaner.exe vorhanden ist, ccleaner64.exe gibt es nur bei 64 bit Systemen
CCleaner := A_Is64bitOS ? "ccleaner64.exe" : "ccleaner.exe" 

 

Das ist so nicht ganz richtig. A_Is64bitOS ist Wahr, wenn es ein x64-System ist.

Also kann man das übersetzen mit

If A_Is64bitOS = True 
  CCleaner := "ccleaner64.exe"
Else
  CCleaner := "ccleaner.exe" 

Die 'einfache' ternäre Schreibweise ist immer da praktisch, wo es nur 2 Alternativen gibt. Man kann Ternaries zwar auch verschachteln, aber dann wird es schnell unübersichtlich.

 

Man könnte den Run-Befehl (dann aber auch die Abfrage auf den Prozess) auch so schreiben:

Run, % A_ProgramFiles "\CCleaner\" (A_Is64bitOS ? "ccleaner64.exe" : "ccleaner.exe") " /Auto"


					
					

All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Was'n da los bei dir?

 

Dein Timer scheint leider nicht zu funktionieren. Ich habe das jetzt an 2 Rechnern getestet (Windows 7 64 bit Professional und Ultimate) und nach dem Beenden des CCleaners passiert nichts weiter.

Da aber Deine Schleife perfekt funktioniert, sehe ich da kein Problem.

Allerdings bin ich da noch auf ein CCleaner spezifisches Problem gestoßen:

Da es die 64 bit Version des CCleaner erst seit Version 3 gibt, ist es möglich das bei älteren Windows 7 Installationen, die Programme unter einem anderen Pfad liegen.
Mögliche Programmpfade sind also:

C:\Program Files (x86)\CCleaner\CCleaner.exe
C:\Program Files (x86)\CCleaner\CCleaner64.exe
C:\Program Files\CCleaner\CCleaner.exe
C:\Program Files\CCleaner\CCleaner64.exe

Denn kurioserweise wird nach dem Update auch die 64 bit Version unter --- C:\Program Files (x86)\CCleaner\CCleaner64.exe --- abgelegt. Es ist also eine weitere else / if Abfrage notwendig.
 

Das ist so nicht ganz richtig. A_Is64bitOS ist Wahr, wenn es ein x64-System ist.

 

Danke für Deine Erklärung. Eigentlich steht es ja auch schon da, hätte ich auch selbst drauf kommen können. ;-)



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011
Dein Timer scheint leider nicht zu funktionieren. Ich habe das jetzt an 2 Rechnern getestet (Windows 7 64 bit Professional und Ultimate)

 

Irgendwie merkwürdig... Auf auf beiden Rechnern läuft die aktuelle Version von AHK, deren Link du in meiner Signatur findest?

 

Mögliche Programmpfade sind also:

 

Leider ist die Liste unendlich happy.png Man kann das Ding vollkommen wahlfrei überall installieren. Und damit es nicht langweilig wird, gibt es auch noch eine Portable.

 

Ich habe mir das Teil nun mal aus der Nähe angesehen und mir neben der Portable auch die 3 Jahre alte 2.29 reingezogen, die ja nur x86 kannte.

 

Die Portable, wie auch die installierten Versionen machen ihr Häufchen im MUI-Cache.

 

Zusätzlich tragen sich die installierten Versionen einheitlich in der Reg ein. Also bin ich mal diesen Weg gegangen, um den Pfad zu ermitteln:

;// Existiert eine installierte Version von CCleaner? // Anderenfalls im MUI-Chache suchen
    RegRead, CCPfad, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ccleaner.exe, Path ; Versuchen, den Pfad direkt auszulesen
    If ErrorLevel                                                                                               ; wenn nicht erfolgreich...
        Loop, HKEY_CURRENT_USER, software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache      ; ...dann alle Einträge im MUI-Cache durchsuchen
        {
          RegRead, Key, HKEY_CURRENT_USER, %A_LoopRegSubkey%, %A_LoopRegName%                                   ; Einzelnen REG_SZ lesen
            If (Key = "CCleaner")                                                                               ; Wenn CCLeaner...
                SplitPath, A_LoopRegName,, CCPfad                                                               ; ...dann  den Pfad aus dem Eintrag isolieren
        } Until CCPfad                                                                                          ; Schleifenende, wenn CCPfad nicht mehr leer ist

    MsgBox % CCPfad

Das sagt aber nur etwas über ein eventuelles "wo". Abprüfen muss man das dann immer noch. Aber so weiß man schonmal, wo man suchen soll wink.png

 

Für solche Spielereien empfehle ich übrigens

SandboxieMirror.png


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Dein Timer scheint leider nicht zu funktionieren. Ich habe das jetzt an 2 Rechnern getestet (Windows 7 64 bit Professional und Ultimate)

  
#Persistent


Prefer ahkscript.org for the time being.


CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

@just me

Das war der entscheidende Tipp - Dann klappts auch mit dem Timer. Vielen Dank für Deine Hilfe.

Funktioniert nicht:
 

SetTimer, Shutdown, 5000
Return
Shutdown:
MsgBox, Der Timer ist abgelaufen

Funktioniert:
 

#Persistent ; Keeps a script permanently running (that is, until the user closes it or ExitApp is encountered).
SetTimer, Shutdown, 5000
Return
Shutdown:
MsgBox, Der Timer ist abgelaufen

@Seidenweber

vielen Dank für Deine Mühe.
Wow, mal wieder ein starkes Stück Arbeit. Allerdings dachte ich eher daran Standartinstallationen zu unterstützen.
Nur Profis würden ja Installationspfade ändern, oder gleich Portable Versionen nutzen, und diese können sich ja die Pfade im AHK Script selbst anpassen, denke ich mal. ;-)
Ich würde daher eine angepasste Version Deiner Original AHK Datei testen wollen, und veröffentliche diese in hier in Kürze.



CodeNewbee
  • Members
  • 104 posts
  • Last active: Dec 02 2015 10:12 PM
  • Joined: 25 Jul 2013

Soo, ich habe das Ganze nun mal angepasst, damit zumindest die 4 üblichen Pfade abgedeckt sind.

Jetzt scheint es aber so zu sein, das der Timer nicht mehr auf das Ende des CCleaners wartet.
 

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#Persistent ; Keeps a script permanently running - fuer den Timer notwendig

;###########################################################
CCleaner := A_Is64bitOS ? "ccleaner64.exe" : "ccleaner.exe"
; Ist es ein 64 bit System?
;###########################################################

If (FileExist("C:\Program Files\CCleaner")) ;  Pruefe ob der Ordner vorhanden ist
{
Run, C:\Program Files\CCleaner\%CCleaner% /Auto, , ; Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen

Sleep, 5000 ; warte 5 Sekunden, da die Bereinigung auch auf schnellen Systemen einige Sekunden dauert

SetTimer, Shutdown1, 1000 ; erstelle einen Timer, und wiederhole ihn jede Sekunde (in Millisekunden)
Return ; ENTER
 
Shutdown1: ; was soll der Timer genau machen:
Process, Exist, %CCleaner% ; prueft ob der CCleaner Prozess noch laeuft
If ErrorLevel ; wenn der CCleaner Prozess nicht mehr gefunden wird - fuehre den naechsten Befehl aus
Run, C:\Windows\System32\shutdown.exe /s /f /t 0, ,Hide ; fuehre shutdown.exe versteckt (, "Arbeitsverzeichniss" , Hide) aus und fahre den PC herunter (Schalter /s), beende alle laufenden Prozesse sofort (Schalter /f), zeige keinen Dialog an und warte nicht mit dem Herunterfahren (Schalter: /t 0  =  0 Sekunden)
Return ; muss laut Debug Info eingefuegt werden
}

Else ; wenn C:\Program Files\CCleaner nicht gefunden wurde, den naechstmoeglichen Pfad testen

{
Run, C:\Program Files (x86)\CCleaner\%CCleaner% /Auto, ,  UseErrorLevel; Der CCleaner laeuft versteckt und automatisch mit den aktuell gespeicherten Optionen um den PC zu reinigen
If ErrorLevel ; der CCleaner wurde nicht an den ueblichen Zielen gefunden
MsgBox, Der CCleaner wurde nicht gefunden!`n`nEventuell wird eine portable Version verwendet, oder die Installation wurde in`neinem anderen Ordner oder auf einem anderen Laufwerk durchgeführt!

Sleep, 5000 ; warte 5 Sekunden, da die Bereinigung auch auf schnellen Systemen einige Sekunden dauert

SetTimer, Shutdown2, 1000 ; erstelle einen Timer, und wiederhole ihn jede Sekunde (in Millisekunden)
Return ; ENTER
 
Shutdown2: ; was soll der Timer genau machen:
Process, Exist, %CCleaner% ; prueft ob der CCleaner Prozess noch laeuft
If ErrorLevel ; wenn der CCleaner Prozess nicht mehr gefunden wird - fuehre den naechsten Befehl aus
Run, C:\Windows\System32\shutdown.exe /s /f /t 0, ,Hide ; fuehre shutdown.exe versteckt (, "Arbeitsverzeichniss" , Hide) aus und fahre den PC herunter (Schalter /s), beende alle laufenden Prozesse sofort (Schalter /f), zeige keinen Dialog an und warte nicht mit dem Herunterfahren (Schalter: /t 0  =  0 Sekunden)
Return
}

Ich bin jetzt hier am Ende angelangt.

Wenn ich den Timer rausnehme, wird der Pfad gefunden und die vorhandene CCleaner Version ausgeführt. Ändere ich den Pfad zum CCleaner in Windows um, zum Beispiel in: "C:\Program Files\CCleaner---ORIGINAL", wird korrekterweise die MsgBox geöffnet und ein Fehler angezeigt.
Irgendwo muss aber ein Fehler im Script sein, da wieder das Ende des CCleaners nicht abgewartet wird.

Nun habe ich wirklich keinen Plan mehr....