HTA - Hypertext Applikationen

Hypertext Applications (HTAs, auch HTML-Applications) waren eine interessante und heute bedeutungslose Erweiterungen von Microsofts Internet Explorer, um “echte” Fenster per XML erweitertem HTML zu erzeugen und Desktop UIs damit zu bauen.

Und mit eben einer solchen HTA gelang es mir vor etwas über 10 Jahren Windows PE basierte Setups zu erstellen.


“Sicher” war der Internet Explorer bekanntlich nie. Und wenn man schon keine sicheren Seiten damit bauen konnte, dann zumindest funktionsreiche.

So stelle ich mir vor, wie Microsoft damals dachte und HTAs waren ein Resultat davon.
Die Idee war einfach: Man fügt eine XML Zeile in den HTML-Kopf ein und speichert die Datei mit der .hta Endung.
Sobald man diese doppelklickt, startet der “HTA Host” und erzeugt ein Browserfenster gemäß den Optionen im XML-Teil.

Der Content wird wie im Browser durch reguläres HTML erzeugt und darf auch alle Features wie Javascript und CSS nutzen.
Man hat quasi einen Browser ohne Browsermenü.

Zusätzlich hat man per Scripting-Host und Active-X auch Zugang zu allerlei lokalen Ressourcen und kann per JScript und VBScript jede Menge Systemoperationen auslösen, wie z.B. auch Prozesse starten.

HTA Demo App

 1<!-- my_app.hta -->
 2<html>
 3<head>        
 4  <title>My Main Window Title</title>
 5        
 6  <hta:application id="myGlobalJSobject" 
 7    applicationname="My application title" 
 8    border="dialog"
 9    caption="yes"
10    contextmenu="no"
11    icon="img/my_app_icon.ico"
12    maximizebutton="no"
13    minimizebutton="no"        
14    navigable="no"
15    scroll="no"
16    selection="no"
17    showintaskbar="yes"
18    singleinstance="yes"
19    sysmenu="yes"
20  ></hta>
21
22  <style>
23    body { width: 700px; height: 500px; } /* app window size */
24  </style>        
25  <link rel="stylesheet" type="text/css" href="my_styles.css" />
26  <script Language="JavaScript" src="my_scripts.js"></script>
27</head>
28<body>
29  My HTML based content rendered in HTA's app window
30</body>
31</html>

JScript und VBScript

Mit Aufrufen wie GetObject("object-moniker")
oder new ActiveXObject("com-class-moniker") konnte man den Windows Script Host anwerfen und mit eben diesem quasi alles andere auslösen.

  • z.B. 0815 UI Features, wie etwa die Ermittelung der Bildschirmgröße um das eigene Fenster anzupassen:
     1var wmi = GetObject("winmgmts:\\\\.\\root\\cimv2");
     2var monitors = wmi.ExecQuery("Select * From Win32_DesktopMonitor");
     3var scrWidth = 0;
     4var scrHeight = 0;
     5for(var monitor = new Enumerator(monitors); !monitor.atEnd(); monitor.moveNext())
     6{
     7  scrWidth = monitor.item().ScreenWidth;
     8  scrHeight = monitor.item().ScreenHeight;
     9  break;
    10}
    
  • Andere Programme ausführen:
    1shell = new ActiveXObject("WScript.Shell");
    2shell.run("c:\\path\\to\\my.exe my_arg1 my_arg2", 0, true);
    
  • Mit lokalen Dateien arbeiten:
    1var fso = new ActiveXObject("Scripting.FileSystemObject");
    2var temp_folder = fso.GetSpecialFolder(2);
    3var temp_file = temp_folder + "\\my_file.txt";
    4var strm = fso.CreateTextFile(temp_file, true);
    5strm.Write("My Content");
    6strm.Close();
    

HTAs als Virus

Der Tod von HTAs lag in “ihrer Macht”. Denn schnell fanden Schurken heraus, dass HTAs gleich mächtig wie die früheren .VBS Scripts waren, nur dass diese anfangs wieder durch diverse Virenfilter durchrutschten.

Letztendlich waren .hta bald als genau so “böse” abgestempelt wie Active-X. Und mit dem Ende des Internet-Explorers verschwand diese Technologie genau so schnell, wie sie eingeführt wurde, da bereits ab dem IE 9 die Ausführung nur noch sehr eingeschränkt möglich war und mit 100en Viren-Warnungen zugeklebt wurde.

HTAs in Windows PE

Interessant ist, dass Windows PE bis heute mit einem HTA-Modul ausgeliefert wird. Integriert man dieses in sein Win-PE Image, können HTAs direkt ausgeführt werden. Und in dieser Umgebung fehlen dann all die Sicherheitswarnungen, die im regulären Windows beim Start einer .hta auftreten würden.

Inspiriert von dieser Vorlage, entschied ich mich 2011 dafür, ein Windows Embedded 7 Setup auf einer HTA aufzubauen.
Es sollte den Benutzer durch ein paar Menüs führen, wo er zwischen installierbaren Windows Images und Updates auswählen konnte.
Im Hintergrund wurden dann einfach diskpart und imagex ausgeführt um die gewünschten Optionen auf die Festplatte zu übertragen.

Bis heute bin ich auf diese Lösung ein bisschen stolz, weil ich in wenigen Stunden ein grafisch anschaubares “Setup” für Endkunden bauen konnte, ohne gleich zu schweren Waffen wie C++ greifen zu müssen.

Fazit

Falco meinte ja einmal:

In Wien mußt’ erst sterben, damit sie dich hochleben lassen.

… und zumindest in meiner kleinen Wiener Wohnung bleibe ich dem Motto nun treu und ernenne HTAs posthum zu einer bemerkenswerten Technik.

Ich frage mich, ob diese Software weiter verbreitet worden wäre, hätte sie nicht der Microsoft Konzern eingeführt, der (nicht ganz zu Unrecht) seit dem Jahr 2000 in der Kritik stand und daher aus Prinzip abgelehnt wurde.
Tatsächlich waren HTAs schon in Windows 98 im IE5 integriert und waren damit 10 Jahre vor Google, Chromebooks und iPhones in der Lage, “produktive Apps” mit HTML zu erstellen.

Fremden HTAs würde ich natürlich auch nicht vertrauen …
Aber meine eigenen liebe ich (fast) genau so, wie meine anderen C++ Kinder.