Anwendungen automatisch schlie▀en

Da Sie nachts oft Daten sichern, lassen Sie Ihren Rechner 24 Stunden am Tag laufen. Oft vergessen Sie oder ein anderer jedoch, ein Programm zu schlie▀en. Die Folge: Die Sicherung lΣuft nicht.

Sie k÷nnen Windows mit Hilfe des Windows Scripting Hosts (WSH) und der Skriptsprache VBScript automatisieren. Besonders gut arbeitet diese Skriptsprache dabei mit den Office-Produkten wie etwa Access zusammen. Allerdings kann VBScript keine bereits existierende Instanz einer Office-Anwendung ansprechen und steuern. Um die beschriebene Anforderung zu erfⁿllen, mⁿssen Sie dafⁿr sorgen, dass das Skript die Anwendung zuvor auch ÷ffnet.
Das Grundprinzip ist recht einfach: Zuerst ermittelt das Skript die aktuelle Uhrzeit und die Anzahl an Millisekunden, die noch bis zum Zeitpunkt der Sicherung verstreichen. Dann ÷ffnet es Access. Schlie▀lich wartet es, wΣhrend Sie mit der ge÷ffneten Datenbank arbeiten, um nach der am Anfang ermittelten Anzahl Millisekunden die zuvor erzeugte Instanz von Access zu schlie▀en.
Sie mⁿssen in Zukunft nur noch dafⁿr sorgen, dass Sie und Ihre Kollegen die betreffende Access-Datenbank ausschlie▀lich mit diesem Skript ÷ffnen. Zu diesem Zweck k÷nnen Sie ein Symbol auf dem Desktop platzieren.
Das folgende Skript geht davon aus, dass der Taskplaner die Datensicherung um 24 Uhr durchfⁿhrt und Windows daher Access gegen 23:45 Uhr beenden soll. Das VBScript hei▀t MANAGE-ACCESS.VBS; Sie k÷nnen es mit jedem beliebigen Texteditor erzeugen oder von der CD kopieren. CHIP-Code Manage.

Option Explicit Dim appAccess Dim szEndTime Dim szPause const szTime = ô23:45:00ö const szDatabase = ôC:\TEST\TEST.MDBö Wartezeit in Sekunden berechnen szEndTime = date & ô ô & szTime szPause = DateDiff(ôsö, now,szEndTime) if (szPause <= 0) then szEndTime = (date + 1) & & szTime szPause = DateDiff(ôsö, now, szEndTime) end if In Millisekunden umrechnen szPause = szPause * 1000 Access und Datenbank oeffnen Set appAccess = Wscript.CreateObject(ôAccess.Applicationö) appAccess.OpenCurrentDatabase (szDatabase) appAccess.Visible = True Warten WScript.Sleep szPause MS Access beenden appAccess.Quit Set appAccess = nothing Und so funktioniert das Skript: Am wichtigsten sind die Konstanten ╗sz Time½ und ╗szDatabase½. Der Wert ╗szTime½ gibt den Zeitpunkt an, zu dem Windows Access beendet. Unter ╗szDatabase½ definieren Sie den Pfad zu einer Access-Datenbank, die das Skript ÷ffnet.
ZunΣchst erzeugen Sie den Zeitstempel ╗szEndTime½ aus dem aktuellen Datum und dem Zeitpunkt ╗szTime½. Danach berechnen Sie mit ╗DateDiff½ die Differenz zwischen dem aktuellen Zeitpunkt und der durch ╗szEndTime½ angegebenen Zeit in Sekunden. Sollte das Ergebnis negativ sein, erzeugen Sie einen neuen Zeitstempel aus dem Datum des kommenden Tages sowie ╗szTime½ und berechnen die Differenz erneut.
Multiplizieren Sie dann die ermittelte Differenz mit 1.000; so erhalten Sie die Anzahl Millisekunden, die verstreichen muss, bevor Windows Access wieder beenden soll. Schreiben Sie diesen Wert in die Variable ╗szPause½.
Jetzt erzeugen Sie ein Objekt des Typs ╗Access.Application½, ÷ffnen die durch ╗szDatabase½ definierte Datenbank und veranlassen das Skript mit der Methode ╗Sleep½ von ╗WScript½ zu warten. Sie ⁿbergeben dabei den Wert ╗szPause½, so dass das Skript rechtzeitig aufwacht, um Access wieder zu beenden.