HTML Application (HTA) — приложение Microsoft Windows, являющееся документом HTML, отображаемым в отдельном окне без элементов интерфейса обозревателя таких как строка меню, строка адреса, панель инструментов («без браузерное приложение») с помощью движка Microsoft Internet Explorer. На HTA не распространяются большинство ограничений безопасности Internet Explorer, в частности на использование небезопасных элементов ActiveX. Например, HTA может создавать, изменять, удалять файлы и записи системного реестра Windows. Возможность создания HTA появилась с выпуском Microsoft Internet Explorer 5.0.
Так как HTA поддерживают исполнение сценариев, они могут являться носителем вредоносного кода.
Запуск HTA
Для запуска HTA предназначена программа mshta.exe, в свою очередь использующая недокументированную функцию RunHTMLApplication из библиотеки mshtml.dll. Так как обычно в системных настройках mshta.exe сопоставлена расширению.hta, то для того, чтобы файл с документом HTML открывался как HTA, достаточно сохранить его с этим расширением.
Настройка поведения и внешнего вида окна HTA
Для настройки поведения и внешнего вида окна HTA введён нестандартный элемент разметки HTA:APPLICATION, который может быть расположен в разделе HEAD документа. Также для фреймов в HTA введён атрибут APPLICATION для задания того, распространяются ли на документ загруженный во фрейм права HTA или (по умолчанию) настройки безопасности Internet Explorer.
Атрибуты элемента HTA:APPLICATION и свойства связанного с ним объекта DOM
| Параметр | Обозначение | Значение(я) |
|---|---|---|
| applicationName | идентификатор исполнения HTA-документа | /* name */ |
| border | вид обрамления окна | thin, dialog, none, thick |
| borderStyle | стиль обрамления окна | complex, normal, raised, static, sunken |
| caption | наличие заголовка окна | yes/no |
| commandLine | командная строка, с которой было запущено приложение: путь к приложению и его аргументы (только свойство) | |
| icon | значок окна, в формате ICO (32x32) | /* path */ |
| maximizeButton | наличие кнопки «восстановить» | yes/no |
| minimizeButton | наличие кнопки «свернуть» | yes/no |
| showInTaskbar | отображение документа в панели задач Windows | yes/no |
| windowState | исходный размер окна | normal, minimize, и maximize |
| innerBorder | внутренняя граница окна | yes/no |
| navigable | определяет открытие ссылки в новом окне или родительском | yes/no |
| scroll | наличие полосы прокрутки | yes/no |
| scrollFlat | 3D-вид полосы прокрутки | yes/no |
| singleInstance | невозможность открытия других окон с тем же значением applicationName | yes/no |
| sysMenu | наличие системного меню и кнопок управления окном в заголовке окна | yes/no |
| contextMenu | контекстное меню, вызываемое правой кнопкой мыши | yes/no |
| selection | разрешение выделения текста в HTA-окне | yes/no |
| version | версия HTA | /* version */ |
Примеры HTA
Простой статичный пример HTA
Приложение отображает статичное содержимое с установленными графическими атрибутами окна.
<html> <head> <HTA:APPLICATION ID="oHTA" APPLICATIONNAME="WMPTour" BORDER="thin" BORDERSTYLE="normal" CAPTION="no" maximizeButton="no" minimizeButton="no" ICON="img/wmptour.ico" SHOWINTASKBAR="no" SINGLEINSTANCE="yes" SYSMENU="yes" VERSION="1.0" WINDOWSTATE="maximize" /> <meta charset="utf-8"> </head> <body> <p>Текст страницы HTA-документа. Для выхода нажмите «Alt»+«F4»!</p> </body> </html>
Классический пример «Hello world!»
Пример классической программы, выводящей приветствие при нажатии на кнопку.
<html> <head> <title>HTA Test</title> <HTA:APPLICATION APPLICATIONNAME="HTA Test" SCROLL="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize" /> </head> <body> <script type="text/VBScript" language="VBScript"> Sub TestSub Msgbox "Hello, world!!!" End Sub </script> <input type="button" value="Run Script" name="run_button" onClick="TestSub()"> </body> </html>
Пример взаимодействия с ОС Windows
Приложение отображает название и версию операционной системы.
<html> <head> <title>Operating System Version</title> <HTA:APPLICATION APPLICATIONNAME="Operating System Version" SCROLL="yes" SINGLEINSTANCE="yes" /> </head> <body style="font:14 pt arial; color:white; filter:progid:DXImageTransform.Microsoft.Gradient (GradientType=1, StartColorStr='#000000', EndColorStr='#0000FF')"> <script type="text/VBScript" language="VBScript"> Sub GetOSVersion strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems Msgbox objOperatingSystem.Caption & " " & objOperatingSystem.Version Next End Sub </script> <p>Нажми на кнопку - получишь результат!</p> <input type="button" value="Operating System" name="run_button" onClick="GetOSVersion()"> </body> </html>