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.