Ist der Windows Wecker parameterisiert aufrufbar?
Ich würde gerne die Windows 10 App "Alarm & Uhr" per Kommandozeile mit einem Parameter füttern, der mir einen Wecker auf eine errechnete Uhrzeit stellt.
Ist das möglich?
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
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
- https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/dateadd-function
- https://ss64.com/vb/dateadd.html
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
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.
https://devblogs.microsoft.com/scripting/how-can-i-play-a-sound-from-within-a-script/
Aus einer Software in Windows einzugreifen, da brauchst Du ein Handle dafür, sehr schwierig! Spiele lieber den Sound direkt aus dem Script, hoffe das Link oben hilft. War mein erste Treffer in Google. Also wenn nicht, - weitersuchen.
Einen Wecker malst Du Dir dann allenfalls selbst, - als Formular.
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.
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.
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.
Das habe ich schon verstanden. Ich sagte ja, ich weiß nicht, wie der Compiler genau arbeitet.
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.