FORMAT PROPRIÉTAIRE WINDOWS • EXTENSION .HTA

.HTA — HTML Application

Un fichier .hta est une application Windows autonome écrite en HTML, CSS et JavaScript (ou VBScript), exécutée par le moteur MSHTML avec des privilèges système complets — sans le bac à sable d'un navigateur web.

Introduit 1999 (IE 5.0)
Moteur MSHTML / Trident
Runtime mshta.exe
Plateforme Windows uniquement
Type MIME application/hta
01

Définition & fonctionnement

HTA signifie HTML Trusted Application. C'est un format propriétaire Microsoft qui transforme une page HTML ordinaire en une application de bureau Windows à part entière — avec une fenêtre propre, un accès complet au système de fichiers, au registre Windows et à tous les objets COM.

Techniquement, un .hta est identique à un fichier HTML — même syntaxe, même CSS, même JavaScript — à une différence fondamentale : il est exécuté par mshta.exe au lieu d'un navigateur, ce qui supprime toute restriction de sécurité et donne accès aux composants Windows natifs via ActiveX.

ℹ
Analogie : Si une page HTML est une lettre dans une enveloppe scellée qu'on ne peut que lire, un HTA est la même lettre mais avec les droits d'administrateur — elle peut ouvrir le tiroir, modifier des fichiers, lancer des processus.

Le runtime : mshta.exe

mshta.exe est présent sur toutes les versions de Windows depuis Windows 2000, dans C:\Windows\System32\mshta.exe. Il instancie le moteur MSHTML dans une fenêtre applicative dédiée sans chrome de navigateur.

SHELL
# Lancement automatique (association de fichier Windows)
MonApp.hta

# Lancement explicite via le runtime
mshta.exe "C:\MonApp\MonApp.hta"

# Depuis un partage réseau (intranet entreprise)
mshta.exe "\\serveur\partage\outil.hta"
02

Historique & contexte

Le format HTA est né dans l'ère où Microsoft cherchait à positionner Internet Explorer non pas comme un simple navigateur, mais comme la couche d'interface universelle de Windows.

1999 — IE 5.0

Microsoft introduit le format HTA avec Internet Explorer 5.0 et Windows 98 SE. L'objectif : créer des outils d'administration internes avec les technologies web (HTML4, CSS1, JScript).

2001 — Windows XP

HTA devient un pilier des outils d'administration système. Les équipes IT l'utilisent massivement pour créer des interfaces de déploiement et de configuration de parc. mshta.exe est intégré à toutes les installations Windows.

2003–2010 — Âge d'or

Les HTA se multiplient en entreprise. Ils remplacent des applications VB6 vieillissantes sans coût de développement important. WScript.Shell, FSO et WMI les rendent extrêmement puissants.

2011–2015 — Déclin

L'essor du web moderne (HTML5, CSS3), la mort progressive d'IE, et les premières failles exploitées via HTA amorcent le déclin. PowerShell propose une alternative plus sûre pour l'administration système.

2016–2022 — Vecteur d'attaque

Des groupes APT exploitent massivement les fichiers HTA pour distribuer des malwares, notamment via e-mails piégés. Microsoft ajoute des avertissements SmartScreen mais maintient le support.

2022+ — Dépréciation progressive

Windows 11 et Defender for Endpoint bloquent de plus en plus les HTA par défaut en entreprise. Le format n'est plus développé, mais mshta.exe reste présent et fonctionnel pour les usages locaux de confiance.

03

Compatibilité par plateforme

⛔
Réponse directe : Non, les fichiers .hta ne fonctionnent que sur Windows. Incompatibles avec macOS, Linux, iOS, Android et tout navigateur web moderne. Ce n'est pas un manque de port — c'est une impossibilité architecturale.
Windows 10
✔ SUPPORTÉ
Natif, mshta.exe présent
Windows 11
✔ SUPPORTÉ
Avertissements Defender possibles
Windows 7 / 8
✔ SUPPORTÉ
Pleinement fonctionnel
Windows Server
⚠ CONDITIONNEL
Requiert Desktop Experience
macOS
✘ INCOMPATIBLE
mshta.exe n'existe pas
Linux
✘ INCOMPATIBLE
Wine partiel, non fiable
iOS / iPadOS
✘ IMPOSSIBLE
Aucun runtime disponible
Android
✘ IMPOSSIBLE
Aucun runtime disponible
Chrome OS
✘ IMPOSSIBLE
Linux layer insuffisant
Navigateurs web
✘ REFUSÉ
Chrome/FF/Edge bloquent le rendu
FonctionnalitéWin 10/11Win 7/8Wine LinuxmacOSMobile
Rendu HTML/CSSOUIOUIPARTIELNONNON
JavaScript (ES5)OUIOUIPARTIELNONNON
VBScriptOUIOUINONNONNON
WScript.ShellOUIOUINONNONNON
FileSystemObjectOUIOUINONNONNON
ActiveX / COMOUIOUINONNONNON
CSS3 / FlexboxLIMITÉNONNONNONNON
ES6+ (let, =>, fetch)NONNONNONNONNON
⚠
CSS et JS modernes : Le moteur MSHTML ne supporte pas var() (variables CSS), CSS Grid, ES6 (let, const, arrow functions, Promise, fetch). Coder en ES5 strict et CSS compatible IE11. Toujours inclure <meta http-equiv="x-ua-compatible" content="IE=edge">.
04

Structure d'un fichier HTA

Un fichier HTA est un fichier texte (UTF-8 ou ANSI) avec l'extension .hta. Sa structure est celle d'une page HTML classique, augmentée de la balise propriétaire <hta:application> dans le <head>.

HTA
<html>
<head>
  <title>Mon Application</title>

  <!-- Balise qui transforme le HTML en HTA -->
  <hta:application
    id="monApp"
    applicationname="MonApp"
    border="thin"
    caption="yes"
    showintaskbar="yes"
    singleinstance="yes"
    windowstate="normal"
  />

  <!-- Force le mode de rendu IE le plus récent disponible -->
  <meta http-equiv="x-ua-compatible" content="IE=edge"/>
  <meta charset="utf-8"/>

  <style>
    body { font-family: Segoe UI, Arial; background: #1a1a2e; }
  </style>

  <!-- VBScript : tâches système bas niveau -->
  <script language="VBScript">
    Function ScriptDir()
      Dim p
      p = document.location.pathname
      p = Replace(p, "/", "\")
      If Left(p, 1) = "\" Then p = Mid(p, 2)
      ScriptDir = Left(p, InStrRev(p, "\") - 1)
    End Function
  </script>

  <!-- JavaScript ES5 : logique applicative et DOM -->
  <script>
    var shell = new ActiveXObject("WScript.Shell");
    var fso   = new ActiveXObject("Scripting.FileSystemObject");

    function ouvrirNotepad() {
      shell.Run("notepad.exe");
    }
  </script>

</head>
<body>
  <button onclick="ouvrirNotepad()">Ouvrir Notepad</button>
</body>
</html>
05

La balise <hta:application>

C'est la balise qui différencie un HTA d'un HTML ordinaire. Placée dans le <head>, elle n'est interprétée que par mshta.exe — les navigateurs l'ignorent.

AttributValeursDescription
applicationnamechaîneNom de l'application affiché dans les propriétés Windows.
borderthick thin dialog noneStyle de bordure de la fenêtre.
borderstylenormal complex raised static sunkenApparence de la bordure.
captionyes / noAffiche ou masque la barre de titre.
contextmenuyes / noActive ou désactive le menu contextuel clic-droit.
iconchemin .icoIcône personnalisée dans la barre des tâches et la fenêtre.
maximizebuttonyes / noBouton de maximisation.
minimizebuttonyes / noBouton de minimisation.
navigableyes / noAutorise la navigation vers d'autres pages dans la fenêtre.
scrollyes / no / autoGestion des barres de défilement.
selectionyes / noAutorise la sélection de texte par l'utilisateur.
showintaskbaryes / noEntrée dans la barre des tâches Windows.
singleinstanceyes / noEmpêche plusieurs instances simultanées.
sysmenuyes / noMenu système (clic sur l'icône de la fenêtre).
versionchaîneNuméro de version à titre informatif.
windowstatenormal / maximize / minimizeÉtat initial de la fenêtre au démarrage.
06

APIs & objets disponibles

Le cœur de la puissance HTA : l'accès à des objets COM Windows hors bac à sable, impossibles à utiliser depuis un navigateur.

WScript.Shell

Exécuter programmes et commandes, lire/écrire le registre, créer des raccourcis, envoyer des frappes clavier.

Scripting.FileSystemObject

Lire, écrire, créer, copier, déplacer, supprimer des fichiers et dossiers. Scanner des arborescences entières.

ADODB.Stream

Lire et écrire des fichiers avec encodage précis (UTF-8, UTF-16, ANSI). Indispensable pour les fichiers avec accents.

Shell.Application

Boîtes de dialogue (BrowseForFolder), accès au Bureau, gestion des fenêtres et icônes système.

WbemScripting.SWbemLocator

WMI — interroger le matériel, les processus actifs, les services, les journaux d'événements.

WScript.Network

Nom de l'ordinateur, utilisateur, domaine, lecteurs réseau mappés, imprimantes réseau.

Microsoft.XMLHTTP

Requêtes HTTP synchrones ou asynchrones vers des APIs ou serveurs locaux.

Scripting.Dictionary

Structure dictionnaire (clé-valeur) pour le stockage en mémoire pendant l'exécution.

VoiceXML.SpVoice

Synthèse vocale Windows — fait lire du texte à voix haute via les voix système installées.

Deux langages simultanés

LangageAttributForcesFaiblesses
JScript language="JavaScript" Syntaxe familière, DOM, manipulation HTML ES5 seulement — pas de let, const, =>, fetch
VBScript language="VBScript" Accès natif chemins Windows, COM avancé, gestion d'erreur robuste Déprécié, syntaxe verbose, pas de JSON natif
ℹ
Bonne pratique : Utiliser VBScript pour les tâches système bas niveau (ScriptDir, registre, chemins) et JavaScript ES5 pour toute la logique applicative, le DOM et l'interface utilisateur.
07

Modèle de sécurité

Le modèle de sécurité d'un HTA est radicalement différent d'une page web. Il s'agit du niveau de confiance le plus élevé disponible sous Windows pour une application non signée.

Confiance totale (Full Trust)

Un HTA tourne dans la zone "Poste de travail local" d'Internet Explorer — la zone de confiance maximale. Aucun bac à sable, aucune politique Same-Origin. Il peut :

JAVASCRIPT — EXEMPLES DE POUVOIRS
// Lancer n'importe quel programme Windows
shell.Run("cmd.exe /c del C:\\fichiers_critiques");

// Lire/écrire N'IMPORTE quel fichier sur le disque
var f = fso.OpenTextFile("C:\\Users\\Bob\\Documents\\passwords.txt", 1);

// Modifier le registre Windows (démarrage automatique)
shell.RegWrite(
  "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\MonApp",
  "C:\\chemin\\MonApp.hta"
);

// Requête réseau sans restriction d'origine
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
xhr.open("POST", "https://n-importe-quel-serveur.com", false);
⛔
Risque critique : C'est pourquoi les HTA sont devenus un vecteur d'attaque de choix. Un HTA reçu par email ou téléchargé d'une source non fiable peut compromettre intégralement le système dès son ouverture. Depuis 2022, Windows Defender et Outlook bloquent automatiquement les pièces jointes .hta.
✔
Usage sûr : Un HTA est sûr lorsqu'il est créé par soi-même, stocké localement ou sur un réseau d'entreprise contrôlé, et utilisé uniquement sur les machines pour lesquelles il a été conçu. Ne jamais exécuter un HTA reçu d'une source inconnue.
08

Moteur MSHTML / Trident

Le moteur de rendu d'un HTA est MSHTML (moteur Trident), identique à Internet Explorer. Sa version effective dépend de la directive x-ua-compatible.

DirectiveMode IECSSJSRecommandé
IE=5IE5 QuirksCSS1 seulementES3NON
IE=8IE8CSS2ES3NON
IE=9IE9CSS2.1 + CSS3 partielES5 partielACCEPTABLE
IE=11IE11CSS3 partiel, Flexbox basiqueES5 completOUI
IE=edgeDernier disponibleMeilleur supportES5 completRECOMMANDÉ
⚠
Ce qui ne fonctionne pas : Variables CSS (var(--x)), CSS Grid natif, display:flex en mode IE9 et antérieur, ES6+ (let, const, =>, Promise, fetch, template literals, destructuring). Écrire en ES5 strict avec var et function classique.
09

Limitations techniques

LimitationImpactContournement possible
Windows uniquementZéro portabilitéElectron, Tauri, PyWebView
Moteur IE (MSHTML)Pas de CSS Grid, ES5 seulementCoder en ES5 + CSS compatible IE11
UI bloquanteshell.Run(..., true) gèle l'interfaceAsync via VBScript + polling setTimeout
Pas de WebSocketsPas de communication temps réelPolling HTTP via XMLHttpRequest
Encodage fragileLes .bat doivent être en ANSIADODB.Stream pour UTF-8, .bat en ANSI
Pas de polices web offlineGoogle Fonts nécessite internetPolices système : Segoe UI, Consolas, Calibri…
Pas de DevToolsDébogage difficileLog visible dans un <div> dédié
UAC requis parfoisCertaines ops nécessitent adminshell.ShellExecute("runas")
Bloqué par les AVDefender peut intercepterExclusion locale, usage sur réseau de confiance
10

Pourquoi les autres devices sont exclus

L'incompatibilité des HTA avec tout device non-Windows est architecturale et fondamentale — ce n'est pas un manque de port, c'est une impossibilité technique.

Smartphones (iOS & Android)

iOS et Android n'embarquent pas mshta.exe, ne disposent pas du moteur MSHTML, et n'ont aucune implémentation des objets COM Windows (ActiveXObject n'existe pas). Il n'existe aucune application capable de combler ce fossé.

macOS & Linux

Wine peut théoriquement faire tourner mshta.exe, mais les objets COM (WScript.Shell, FileSystemObject) ne fonctionnent pas correctement car les appels système Windows ne se traduisent pas vers POSIX. Les HTA non triviaux ne fonctionnent pas sous Wine.

Navigateurs web

Chrome, Firefox, Edge et Safari refusent d'exécuter les HTA. Si un .hta est ouvert dans un navigateur, il est rendu comme du HTML ordinaire et tous les appels à ActiveXObject lèvent immédiatement une ReferenceError.

11

Alternatives cross-platform

Pour un outil similaire fonctionnant sur plusieurs plateformes ou sur mobile :

Electron
Windows · macOS · Linux

HTML/CSS/JS (Chromium) + Node.js. Le plus populaire, très puissant (~150 Mo). Utilisé par VS Code, Slack, Discord.

Tauri
Windows · macOS · Linux · Mobile (beta)

HTML/CSS/JS + Rust. Très léger (~5 Mo), performant. Support mobile en cours de développement.

PyWebView
Windows · macOS · Linux

Python + webview natif du système. Simple à déployer, Python pour le backend système.

PowerShell + WPF
Windows uniquement

Interfaces XAML riches via PowerShell. Le successeur naturel des HTA pour l'administration Windows.

NW.js
Windows · macOS · Linux

Alternative à Electron, accès Node.js direct depuis le HTML sans IPC.

PWA
Tous devices

Application web progressive. Fonctionne partout. Accès système limité (File System Access API).

TechnologieWindowsmacOSLinuxMobileAccès systèmeTaille
.HTAOUINONNONNONTOTAL~0 Ko
ElectronOUIOUIOUINONCOMPLET~150 Mo
TauriOUIOUIOUIBETACOMPLET~5 Mo
PyWebViewOUIOUIOUINONCOMPLET~30 Mo
PWAOUIOUIOUIOUILIMITÉ~0 Ko
12

Cas d'usage appropriés

Cas d'usagePertinence HTARaison
Outil d'administration Windows interneEXCELLENTAccès complet WMI, registre, FSO. Zéro dépendance.
Utilitaire personnel (conversion, batch…)EXCELLENTRapide à créer, aucune installation requise, fichier unique.
Interface pour scripts ffmpeg / ffprobeTRÈS BONC'est exactement le cas du VideoSplit.hta de ce projet.
Déploiement sur parc Windows entrepriseACCEPTABLEFonctionne si parc homogène, attention aux politiques AV.
Application destinée au grand publicDÉCONSEILLÉIncompatibilité Mac/mobile, blocage AV, image négative.
Application mobile ou tabletteIMPOSSIBLEIncompatibilité totale iOS/Android.
Outil accessible depuis un navigateurIMPOSSIBLELes navigateurs modernes refusent d'exécuter les HTA.
✔
Conclusion : Le HTA est un outil Windows-only, puissant, rapide à développer, sans aucune installation — un fichier texte qui devient une application. C'est le choix idéal pour les utilitaires personnels sur poste Windows fixe. Pour tout usage multiplateforme ou mobile, se tourner vers Electron, Tauri, ou une PWA.