Frage zu TrayTip

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

just me
Posts: 9459
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Frage zu TrayTip

16 Mar 2016, 04:33

Moin,

das komplette Skript macht die Beurteilung leichter. Ich werde mich etwas später wieder melden.

Erst einmal ein Kommentar dazu:

Code: Select all

#Persistent ; Keeps a script permanently running - fuer Timer und Schleife notwendig
Das ist so nicht richtig.

Schleifen (wie z.B.Loop) sind darauf überhaupt nicht angewiesen. Sie führen den Schleifenblock solange aus, bis die Schleife durch eine entsprechende Anweisung, nach einer vorgegebenen Anzahl von Wiederholungen oder bei einer vorgegebenen Abruchbedingung verlassen wird.

Für Timer ist das nur dann wichtig, wenn der Timer auch nach Beendigung des automatischen Ausführungsbereichs weiterlaufen soll und das Skript keine Hotkeys oder Guis enthält.

Es verhindert allerdings, dass das Skript mit Return oder Exit beendet werden kann. Es braucht dann immer ein ExitApp.
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

...oder so

16 Mar 2016, 04:51

Ich habe gerade im englischsprachigen Forum noch etwas gefunden:
https://autohotkey.com/boards/viewtopic ... s+function
Skriptbeispiel
Also könnte man damit einen inneren Loop darstellen:
Laufwerkscheck
Greetings Best-Code-in-Use
just me
Posts: 9459
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Frage zu TrayTip

16 Mar 2016, 04:51

So, Anmerkung 2:

Des Pudels Kern in Deinem Skript ist ja wohl genau diese Schleife:

Code: Select all

loop   ; Die Schleifenanweisung wird staendig wiederholt, Quelle= http://www.autohotkey.com/board/topic/71642-help-with-loop-for-scanning-folders-to-check-if-files-exist/
{

   If FileExist(Pruefdatei_001)       ; wenn das Laufwerk A angeschlossen ist
      {
	  TipTitle := "CHKDSK - A"
	  SetTimer, TrayTipAktualisieren, 1000
	  Gosub, TrayTipAktualisieren ; Einmal aufrufen, um es sofort zu starten.
	  RunWait, %comspec% /c chkdsk A: /f  ,,hide
	  TrayTip ; Leerer Textparameter schliesst den TrayTip wieder
	  SetTimer, TrayTipAktualisieren, Off
	  RunWait, "%ProgPfad%" "%Spiegelung_USB_2016%" -leftdir "%Quelle_001_D%" -rightdir "%Ziel_001_A%",, ; Fuehre den Abgleich der Ordner durch
	  RunWait, "%RemoveDrive%"  a: -d -e -l  ,,hide
	  }
	  Else If FileExist(Pruefdatei_002)  ; sonst wenn das Laufwerk B angeschlossen ist
      {
	  TipTitle := "CHKDSK - B"
	  SetTimer, TrayTipAktualisieren, 1000
	  Gosub, TrayTipAktualisieren ; Einmal aufrufen, um es sofort zu starten.
	  RunWait, %comspec% /c chkdsk b: /f  ,,hide
	  TrayTip ; Leerer Textparameter schliesst den TrayTip wieder
	  SetTimer, TrayTipAktualisieren, Off
	  RunWait, "%ProgPfad%" "%Spiegelung_USB_2016%" -leftdir "%Quelle_001_D%" -rightdir "%Ziel_002_B%",, ; Fuehre den Abgleich der Ordner durch
	  RunWait, "%RemoveDrive%"  b: -d -e -l  ,,hide
	  }
	Else  ; falls kein externes Laufwerk angeschlossen ist
      {
		MsgBox, 4, Externes Laufwerk A oder B nicht gefunden!!, ###################################################`n###################################################`n`n`nDas externe Laufwerk A oder B wurde nicht gefunden.`nBitte eine externe Sicherungs-Festplatte anschließen!!!`n`nNach dem Anschließen JA drücken.`n`nMöchten Sie jetzt fortfahren?`n(Drücken Sie JA oder NEIN)`n`n`n###################################################`n###################################################
		IfMsgBox No
			ExitApp ; es wurde "Nein" gedrueckt, also beende das Script
		; Bei JA springt das Script automatisch zum Anfang der Schleife (Loop)
		}
} ; <<<<< Schleifende gesetzt!!!
Die soll solange laufen, bis die Sicherung erledigt ist oder der Benutzer das Ganze abbricht. Für mich stellt sich hier die Frage, ob es immer beide Laufwerke sein sollen, oder ob eine Sicherung auf eines der Laufwerke ausreicht.
just me
Posts: 9459
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Frage zu TrayTip

16 Mar 2016, 04:59

Zu Deiner letzten Nachricht: Dein Skript schafft das schon, es ist nur eine Frage der Strukturierung.

Und, fühle Dich nicht 'dumm', wenn Du Fehler machst. Das Programmieren wird wohl nur sehr wenigen Menschen in die Wiege gelegt. Die weitaus meisten Menschen müssen es mehr oder weniger mühsam lernen. Ich habe damit etwa 1980 angefangen. ;)
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

...Sorry

16 Mar 2016, 05:05

Hier haben wir wohl etwas parallel gepostet...

Na ja, eigentlich soll ja hier nur die Ermittlung stattfinden, welches Laufwerk angeschlossen ist, und erst dann sollen die Sicherungsbefehle durchgeführt werden.
Also könnte auch erst eine Prüfung erfolgen, mit eventueller MsgBox, und dann würde der korrekte Laufwerksbuchstabe an die nachfolgenden Instanzen übergeben werden.

Allerdings übersteigt das meine Kenntnisse, daher habe ich es so eingebaut...
Und eigentlich machen ja beide Schleifen das Gleiche...
TrayTip
CHKDSK
TrayTip beenden
Daten Spiegeln
Laufwerk auswerfen

Allerdings habe ich auch Laufwerke auf denen von verschiedenen Laufwerken Ordner gesichert werden sollen:

Beispiel:
Laufwerk1= Ordner1 und Ordner 3 zusätzlich noch von Laufwerk2= Ordner4 und Ordner5 alles auf Laufwerk M
Hier sind dann in der Sicherungsdatei die Ausnahmen definiert, damit Ordner1 und Ordner3 von Laufwerk1 nicht versehentlich bei der Spiegelung von Laufwerk2 gelöscht werden können!!!
Greetings Best-Code-in-Use
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

....

16 Mar 2016, 05:08

:D
Und, fühle Dich nicht 'dumm', wenn Du Fehler machst. Das Programmieren wird wohl nur sehr wenigen Menschen in die Wiege gelegt. Die weitaus meisten Menschen müssen es mehr oder weniger mühsam lernen. Ich habe damit etwa 1980 angefangen.
Na ja, mühsam nährt sich das Eichhörnchen... Immer wenn ich gerade denke, so muss es funktionieren, gibt es wieder einen Rückschlag, aber ich bleibe dran... :wave:
Greetings Best-Code-in-Use
just me
Posts: 9459
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Frage zu TrayTip

16 Mar 2016, 05:29

Gut, dann ist es (für mich) eigentlich gar nicht so schwer.

Unter diesen Umständen macht Deine 'äußere' Schleife

Code: Select all

loop   ; Die Schleifenanweisung wird staendig wiederholt, Quelle= http://www.autohotkey.com/board/topic/71642-help-with-loop-for-scanning-folders-to-check-if-files-exist/
{

   If FileExist(Pruefdatei_001)       ; wenn das Laufwerk A angeschlossen ist
...
...
...
TrayTipAktualisieren:
TrayTip, %TipTitle%, ...läuft, , 16
Return

}; Ende der Schleifenanweisung
nicht wirklich Sinn. Außerdem sind Timer an sich ganz normale Subroutinen, die innerhalb von Schleifen nichts zu suchen haben. Ansonsten kann es passieren, dass das Skript beim Ausführen der Schleife unbeabsichtigt auch die Timerroutine durchläuft. Im Gegensatz zu Funktionen sorgen die Timerlabel nicht dafür, dass der Timercode nicht auch sequentiell durchlaufen wird.

Folgendes könnte aber klappen:
  • Du schließt die Sicherungsschleife mit einer eigenen Klammer (}) ab und entfernst dafür das unterste 'Schleifenende'
  • Du sorgst dafür, dass die Sicherungsschleife nach erfolgter Sicherung verlassen wird. Dafür genügt ein Break am Ende des Sicherungscodes.

    Code: Select all

       If FileExist(Pruefdatei_001)       ; wenn das Laufwerk A angeschlossen ist
          {
    	  TipTitle := "CHKDSK - A"
    	  SetTimer, TrayTipAktualisieren, 1000
    	  Gosub, TrayTipAktualisieren ; Einmal aufrufen, um es sofort zu starten.
    	  RunWait, %comspec% /c chkdsk A: /f  ,,hide
    	  TrayTip ; Leerer Textparameter schliesst den TrayTip wieder
    	  SetTimer, TrayTipAktualisieren, Off
    	  RunWait, "%ProgPfad%" "%Spiegelung_USB_2016%" -leftdir "%Quelle_001_D%" -rightdir "%Ziel_001_A%",, ; Fuehre den Abgleich der Ordner durch
    	  RunWait, "%RemoveDrive%"  a: -d -e -l  ,,hide
    	  Break ; <<<<< Fertig, die Schleife kann verlassen werden.
    
  • Und das sollte es auch schon gewesen sein.
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

...Danke

16 Mar 2016, 06:04

Hallo just me, vielen Dank, ich werde es gleich mal testen.
Ich Denke Du meinst es so:
Neuer Loop - geschlossen
Und zum Schluss bleibt es aber bei bei=

Code: Select all

Return

TrayTipAktualisieren:
TrayTip, %TipTitle%, ...läuft, , 16
Return
Oder???
Greetings Best-Code-in-Use
just me
Posts: 9459
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Frage zu TrayTip

16 Mar 2016, 06:30

Zum Schluss bleibt es bei

Code: Select all

 
ExitApp ; statt Return???
 
TrayTipAktualisieren:
TrayTip, %TipTitle%, ...läuft, , 16
Return
wenn Du nicht das #Persistent entfernst.
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

teste gerade das "alternative Ende"

16 Mar 2016, 07:21

Also ExitApp funktioniert ja, und jetzt teste ich gerade mit return und auskommentiertem #presistent
...funktioniert.

Alles Bestens, Danke :thumbup:
Greetings Best-Code-in-Use

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: KruschenZ, Meister Lampe and 59 guests