HTAs sind HTML-Applikationen
(HTA = HTML-Application), die auf einem Computer
lokal, im Kontext das angemeldeten Benutzers, ausgeführt werden - genau
so,
wie jede andere Anwendung auch. Dies bedeutet: HTAs können Computer-Viren
oder -Würmer sein bzw. welche enthalten. Damit sind sie so gefährlich
oder ungefährlich und nützlich wie jede andere Anwendung (VBS, VB, VBA, EXE, COM).
Da HTAs HTML-Applikationen sind, enthalten sie HTML-Code - man muss sich
also etwas mit HTML beschäftigen. Für diesen Einstieg bietet es sich an, die Anleitung
von
SELFhtml.org
vom
download
für das Offline-Lesen herunter zu laden.
Seit Dezember 2004 bietet MS ein
HTA Helpomatic,
das Beispiel-Code anzeigt.
Dadurch genügen einige HTML-Grundkentnisse zum Aufbau einer HTML-Seite,
um recht Anspruchsvolle Applikationen erstellen zu können.
Da der Download eine Überprüfung der installierten
Windows-Lizenz voraussetzt, traue ich mir nicht, dieses Tool hier an zu bieten.
Weitere Infos zu
HTA:APPLICATION
auf der MS-Site und im
HTA Developers Center -
auch auf der MS-Site.
Beim Starten von HTAs
(z.B. durch einen Doppelklick auf eine solche Datei)
erkennt Windows an Hand der Dateiendung (.hta), dass diese Datei mit (dem Interpreter)
mshta.exe (befindet sich im ..\system32\-Verzeichnis) gestartet werden soll.
Findet Windows diese mshta.exe nicht, öffnet sich der typische 'Öffnen mit'-Dialog.
Aktuelle Windows-Versionen verhindern es (normalerweise), Anwendungen direkt
aus dem Internet heraus auszuführen: es erfolgt immer eine Abfrage, ob die
Anwendung herunter geladen oder geöffnet werden soll. Dies ist der typische
Dialog des Internet Explorers, um etwas aus dem Internet herunter zu laden.
Da HTAs Anwendungen sind, öffnet sich dieser Dialog ebenfalls, wenn man sie
im Internet anklickt - anders als bei
'normalen' HTML-Dateien, die ohne Nachfrage (im IE) angezeigt werden.
Was ist zu beachten?
1. VBscript, JScript oder was?
VBscript und JScript funktionieren auf jeden Fall in HTA und
"... HTAs run embedded Microsoft ActiveX controls and Java applets ...".
Ich glaube nicht, dass JavaScript läuft (habe ich nicht getestet - wenn
jemand etwas anderes weiss, möge er es mir mitteilen!).
2. WScript.Sleep geht nicht!
Auch die folgende Zeile geht nicht:
Dim WshNet : Set WshNet = WScript.CreateObject("WScript.Network")
Aber zum Glück gehts dann so:
Dim WshNet : Set WshNet = CreateObject("WScript.Network")
3. Do..Loop-Schleifen / HTAs beenden
So lange ein Skript in einer HTA läuft, kann man diese
(z.B. mit [Alt-F4]) nicht beenden - die Anzeige verschwindet zwar,
aber das Skript läuft weiter.
Dies ist der Grund, warum man keine (unendlichen) Do..Loop-Schleifen
verwenden sollte. Statt dessen sind, nach einer kurzen Pause, wiederholte
Aufrufe von Prozeduren sinnvoll, wie
QuellCode>
120minReboot.hta demonstriert.
4. Fehler im Skript-Code
Fehler im VBS-Code werden nicht immer mit einer Fehlermeldung angezeigt - die
Abarbeitung wird einfach beendet.
Bei WinPE (z.B. durch
Bart's PE Builder)
werden überhaupt keine Fehler angezeigt.
Daher habe ich bei umfangreichen Skripten in HTAs eine
Statusanzeige eingebaut
document.all.Stand.innerHTML = "0102 :: "
WSHShell.Run "wait.vbs", , true
die im HTML-Bereich dann angezeigt wird:
<center id=Stand> </center>
Das
QuellCode>
wait.vbs
ist erforderlich, damit die Ausgabe auch erscheint. In einer
HTA beansprucht die Skript-Abarbeitung nämlich die gesamte Aufmerksamkeit bzw.
CPU-Leistung, so dass die Anzeige vernachlässigt und damit nicht angezeigt wird.
Beispiele
QuellCode>
120minReboot.hta zeigt,
wie man ohne WScript.Sleep auskommen kann.
QuellCode>
input.hta
erfasst mehrere Eingabe in einem Formular.
QuellCode>
dateiauswahl-txtzeigen.hta
aus
Use a File Open Dialog Box to Populate a List Box (Windows XP-only)
von der MS-Site zeigt, wie man einen "Datei öffnen" -Dialog erstellen kann. Die ausgewählte
Datei wird als Textdate geöffnet und in einem Fenster angezeigt.
QuellCode>
loginhta.hta -
ermöglicht die Eingabe eines Anmeldenamens und eines Passworts, wobei die
Eingabe des Passworts versteckt (Sternchen) erfolgt.
Im Start-Button ist der Name des zu startenden Skripts enthalten.
In diesem Beispiel erstellt die HTA auch gleich noch
das passende (Anmelde- bzw.) Auswerte-Skript.
QuellCode>
login2server.hta ermöglicht die Zuordnung
von Netzlaufwerken zu Freigabenamen von Servern, die sich in einer anderen Domän befinden. In einem
Active-Directory-Netzwerk wurde durch Policys die Speicherung des Passworts für
die Anmeldung an NT4-Server nach einem PC-Neustart deaktiviert
("net use . . /Persistent funktioniert dann nicht").
Mit login2server.hta im Autostart können
recht komfortabel mehrere Zuordnungen durch Eingabe des Passworts automatisiert werden.
QuellCode>
tastaturcode.hta
wird 30s angezeigt und zeigt während dieser Zeit
den Tastaturcode der Tasten an, die gedrückt wurden.