Ist der Windows Wecker parameterisiert aufrufbar?


09.11.2020, 15:59

Ich habe es so gelöst, dass ich eine hta-Wecker-Anwendung geschrieben habe (mit einem Countdown-Timer-Ansatz) aus dem Internet.

Der Vorteil bei hta ist, dass diese mit VBScript-Funktionen arbeiten kann, also dass die Anwendung gut in mein bestehendes Script greifen kann.

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Im eigentlichen Sinne hat Windows keinen per Batch programmierbaren Wecker.

Allerdings kann man in der Aufgabenplanung beliebige Aufgaben erstellen. Das beinhaltet sowohl den Start von Programmen, als auch Mediendateien. Der entscheidende Vorteil gegenüber einem laufenden Programm oder Script ist, der Rechner kann zwischendurch heruntergefahren und neu gestartet werden, ohne sich darum zu kümmern was in der Zwischenzeit geschieht. Wenn nicht explizit in den Energieeinstellungen der Rechnerstart für Aufgaben unterbunden ist, startet der Rechner um die gewählt Aufgabe auszuführen.

Ich habe keine Ahnung was dein VBS für Zeiten berechnet. Ergo habe ich ein kleines Script gebastelt, welches einfach Stunden und Minuten zur aktuellen Zeit addiert.

dateadd.vbs

'nur mal eine kleine Demo zum Rechnen mit Zeiten
Minutes=5  ' die anzahl der Minuten welche  addiert werden sollen
Houres=2
t=DateAdd("n", Minutes, Now())  ' n repräsentiert Minuten
t=DateAdd("h", Houres, t)  ' h repräsentiert Stunden
WScript.Echo t  'Ergebniss ausgeben

Eine kleine Batch, welche obiges VBS ausführt, die Ausgabe des Scripts auswertet und mit dem ausgegebenen Datum und Zeit die Aufgabenverwaltung programmiert (eine Aufgabe erstellt)

  rem das ist mal wieder ein multifunktionale Batch
  rem wird kein Parameter  übergeben (normaler start), wird  die Aufgabenplanung  programmiert.
  rem wird als  Parameter beep übergeben, wird nichts weiter getan als 3 mal zu beepen
if "%~1"=="beep" goto :beep
  rem Daten von VBScript übernehmen
for /f "tokens=1,2" %%a in ('cscript //nologo "dateadd.vbs"') do (
    set "startDay=%%a"
    set "startTime=%%b"
)
  rem wir  brauchen nur Sunden und Minuten, also nutzen wir  nur  die ersten 5 Zeichen des String...  
set "startTime=%startTime:~0,5%"
  rem zur demo soll diese Batch mit dem Parameter beep gestartet werden
  rem hier kannst Du auch ein Programm oder eine Mediendatei eintragen...
set "startProgram=%~f0"
set "param=beep"


  rem Aufgabenplanung programmieren: Aufgabenname , zustartendes Programm [Parameter], Wiederhohlungen=Einmalig, Tag, Zeit, /f = überschreiben ohne Nachfrage
schtasks /create /tn "Test Wecker" /tr "\"%startProgram%\" %param%" /sc ONCE /sd %startDay% /st %startTime% /f


  rem mal die Aufgabenverwaltung GUI anzeigen, damit Du siehst was passiert ist
start "" "taskschd.msc" 
pause
exit /b
::ende 1.Batch:begin 2.Batch
:beep
  rem beepe 3mal (kleiner Missbrauch von choice)
echo aaax|choice /c x 
pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Suboptimierer 
Fragesteller
 04.11.2020, 08:11

Dankeschön! Ich schaue es mir an.

0

Ich bin nicht sicher, ob das überhaupt geht.

Grundsätzlich sollte die Aufgabenplanung einiges ermöglichen.

Wenn Du Dein Projekt und Bedürfnis genauer schilderst, fällt den Leuten sicher mehr ein.

Wenn nicht, suche nach "Klebezettel", eine alte Freeware mit alert.

Suboptimierer 
Fragesteller
 02.11.2020, 15:30
Wenn Du Dein Projekt und Bedürfnis genauer schilderst, fällt den Leuten sicher mehr ein.

Ich möchte zu einer errechneten Uhrzeit von Windows alamiert werden. Die Uhrzeit ändert sich von Tag zu Tag. Die Berechnung führe ich in Visual Basic Script durch.

Falls ihr mehr Infos benötigt, bitte fragen.

Die Möglichkeit über geplante Tasks schaue ich mir an.
Aber selbst da wäre ein Ansatz hilfreich.

0
Suboptimierer 
Fragesteller
 02.11.2020, 15:54
@Mauritan

Ich habe es nun so gelöst:

      While Now() < Zielzeit
         WScript.Sleep 3000
      Wend
      MsgBox "Die Zeit ist um."

Ist natürlich doof, wenn alle drei Sekunden das Skript die Zeit abfragt.

0
Mauritan  02.11.2020, 18:14
@Suboptimierer

Also ich finde das ziemlich cool!!

Die Lösung ist elegant. WOW

Kurz, prägnant. Ach, alle 3 Sekunden eine Abfrage, das ist faktisch Null auf einem moderenen Rechner.

Da fällt mir aber noch etwas beim nochmaligen lesen auf: Möglicherweise wird diese Schleife nicht alle 3 Sekunden durchlaufen, sondern - je nach Compiler - viel öfter, sollte "while" öfter geprüft werden. repeat until / if then könnte das verändern. Doch ich weiß es nicht, wie der Compiler das genau tut.

0
Suboptimierer 
Fragesteller
 03.11.2020, 08:09
@Mauritan

Der Sleep-Command sollte dafür sorgen, dass die Scriptausführung für 3 Sekunden gestoppt wird.

Deine Bedenken verstehe ich nicht.

Auf die Millisekunde, die die Interpretation des While-Befehls benötigt, kommt es mir nicht an.

0
Mauritan  03.11.2020, 09:52
@Suboptimierer

Das habe ich schon verstanden. Ich sagte ja, ich weiß nicht, wie der Compiler genau arbeitet.

0