OVH Cloud OVH Cloud

HTA... gloups

14 réponses
Avatar
GOWAP
Coucou,

bon, finalement, j'avais cru comprendre un jour que le HTA était utilisé par
les virus, mais j'avais jamais vu qu'avec un HTA on pouvait faire un
programme complet (ScriptomaticV2.hta).

A votre bon coeur !
où puis-je trouver le HTA pour les nuls ?
Option, c'est quoi ? ça ce lance comment ? ya quoi dedans ? c'est gentil ou
pas ? Ya une version blonde ? (au cas où je capterais pas).

GOWAP

10 réponses

1 2
Avatar
Jean
Bonjour,

La documentation sur les HTA est ici :
http://msdn.microsoft.com/workshop/author/hta/reference/hta_ref_entry.asp

Pour faire simple, les fichiers HTA fonctionnent comme des fichiers HTML et sont essentiellement utilisés pour l'interfacage des
scripts (qui sont
alors exécutés via des balises <script> au sein du HTA ).
Ceux-ci ont l'avantage (par rapport aux fichiers HTM) de ne pas dépendre de la sécurité Internet Explorer ... vous n'aurez donc pas
de boîte d'avertissement lorsque vous utiliserez des ActiveX non déclarés sûrs pour la navigation.
Les HTA ont donc comme vocation une exécution *locale*.

Pour les scripts, tenir en compte le fait que vous n'aurez pas accès à l'objet WScript ( intrinsèque à Windows
Scripting Host : wscript.exe/cscript.exe) comme dans des fichiers VBS, JS, ... hébergés par Windows Scripting Host.

Pour l'interfacage vous devrez tenir en compte le fait que les HTA sont exécutés par mshta.exe et les HTM par iexplore.exe (sur une
installation standard de Windows) ...
Comprenez : mshta.exe n'est pas un navigateur Internet (comme iexplore.exe) => vous n'aurez donc pas accès à toutes les
possibilités
exposées pour le Document Object Model/DHTML dans la documentation MSDN (
http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp ).
Par exemple, pas d'accès à l'historique dans la fenêtre d'un HTA.

Comme vous le verrez en lisant la documentation, les HTA sont essentiellement un fichier HTM avec traitement (analyse) d'une balise
<HTA /> supplémentaire qui permet avant tout de configurer l'apparence et le comportement de la fenêtre de l'application.
_A retenir_ : toutes les propriétés de la balises HTA en automation ne sont accessibles qu'en lecture, *pas en écriture*.

A vrai dire pour d'autres exemples HTA ... vous pouvez renommer quelques fichiers HTM en HTA et voir ce que ça donne ... dans un
premier temps :-)

Considérez ce qui suis comme *très* secondaire :-)

Pour le "HTA=virus" ... je dirais : pas plus que pourrait l'être un exe, bat, cmd, com, dll, ... même si je dois dire que parfois,
cette réputation me pousse à penser que je gagnerais peut être du temps en palabres et explications à donner lorsque je distribue
ceux que je
développe (parceque Norton les annoncent comme scripts "malveillants" sans les guillemets par ex.) en me retournant vers un language
dit de
plus haut niveau (fournissant du code compilé) ... c'est dommage à dire mais apparemment ... ça rassure :-)

La mauvaise réputation des HTA tient sans doute aussi en partie au fait que ces fichiers n'ont été affublés d'une icône standard
qu'à partir de Windows XP SP2 ...

Sinon avec HTA et les languages de scripts (+ éventuellement quelques activeX tiers) vous avez un envirronement de développement
complet et *gratuit* ... vous faites *tout*
ce que vous voulez (avec parfois quelques efforts à fournir).

Amicalement,

Jean - JMST
Belgium

"GOWAP" <gowap@@@fr.fm> a écrit dans le message de news: %
Coucou,

bon, finalement, j'avais cru comprendre un jour que le HTA était utilisé par
les virus, mais j'avais jamais vu qu'avec un HTA on pouvait faire un
programme complet (ScriptomaticV2.hta).

A votre bon coeur !
où puis-je trouver le HTA pour les nuls ?
Option, c'est quoi ? ça ce lance comment ? ya quoi dedans ? c'est gentil ou
pas ? Ya une version blonde ? (au cas où je capterais pas).

GOWAP




Avatar
Jceel
"Jean" <http:// a écrit dans le message de news:

Ceux-ci ont l'avantage (par rapport aux fichiers HTM) de ne pas dépendre
de la sécurité Internet Explorer ... vous n'aurez donc pas
de boîte d'avertissement lorsque vous utiliserez des ActiveX non déclarés
sûrs pour la navigation.
Les HTA ont donc comme vocation une exécution *locale*.


par contre les anti-virus qui ne voient pas plus loin de leur nez
*TOUSSENT* sur Scan_ordi de mon site qui est un HTA tout comme avec
*REPAREIE* de Jean qui contient du VB
--
@++++Jceel

En vérité je te le dis mais sous O E
internaute indécis pour le HacheuTeuMeuLeu
seul le click droit Control+F deux
la lumière t'apportera C'est ce qu'il y a de mieux
netevangile..selon Jceel.livre du windows.psaume alt-255..verset ÿp
Jceel http://jceel.free.fr l'hyper du gratuit du net
Founding Chairman of the International Pebkac Busters Company

Avatar
Do Re Mi chel La Si Do
Bonsoir !


Pour moi aussi, au début. Mais, après avoir réfléchi, j'ai désactivé la
vérification des scripts locaux. Il suffit de ne pas lancer de scripts
d'origines douteuses, sans avoir préalablement vérifié, pour être bien
protégé.



Autre chose, j'ai un petit problème avec les HTA : lorsque j'ouvre, dans une
fenêtre popup (avec window.open), un sous-document .hta, Windows
l'interprète comme un téléchargement, avec message "parano", demande de
confirmation, etc.

Or, si j'ouvre le MEME fichier, en .htm, tout se passe bien, sans aucun
message. Mais on se trouve dans I.E.



Comment faire un "windows.open" (javascript), sur un .hta, sans que windows
ne croit qu'il s'agit d'un téléchargement local ?



@-salutations
--
Michel Claveau
Avatar
Jean
Bonsoir,

Pour faire ça utilisez plutôt les méthodes showModalDialog ou showModelessDialog (voir ci dessous).
(Une autre solution pourrait être d'exécuter le second HTA avec la méthode Run de l'objet WScript.Shell ... mais ce sera plus
chipo).

Personellement quand c'est possible je préfère généralement réutiliser la fenêtre du HTA et/ou créer des "pseudo-fenêtres" à l'aide
d'éléments positionnés en absolu ... ça permet généralement de tout embarquer dans un seul fichier ... évidemment il faut penser
l'interface en fonction de ces prérogatives.

Voici les codes pour un exemple utilisant showModalDialog pour exécuter un second HTA.
Copiez les fichiers Maitre.HTA et Dialogue.HTA dans un répertoire.
Ensuite, exécutez Maitre.HTA.
http://automation.eu.tf/Maitre.HTA
http://automation.eu.tf/Dialogue.HTA

<!---8<---Maitre.HTA--->
<script defer>
function B1.onclick(){
r=showModalDialog('Dialogue.HTA',window)
D1.innerText='La fenêtre de dialogue a retourné : '+r
}
</script>

<input
id±
type='button'
value='Ouvrir'
/>
<div idÑ></div>
<!---8<---Maitre.HTA--->

<!---8<---Dialogue.HTA--->
<script>
dialogArguments
.document
.body
.style
.backgroundColor='lemonchiffon'

returnValue='2005'

function window.onunload(){
new ActiveXObject('WScript.Shell')
.Run('notepad.exe')
}
</script>

La couleur de fond de Maitre.HTA
a été modifée par ce fichier.<br />
A la fermeture de cette fenêtre,
Notepad va être exécuté.
<!---8<---Dialogue.HTA--->

Amicalement,

Jean - JMST
Belgium

"Do Re Mi chel La Si Do" a écrit dans le message de news:
Bonsoir !


Pour moi aussi, au début. Mais, après avoir réfléchi, j'ai désactivé la
vérification des scripts locaux. Il suffit de ne pas lancer de scripts
d'origines douteuses, sans avoir préalablement vérifié, pour être bien
protégé.



Autre chose, j'ai un petit problème avec les HTA : lorsque j'ouvre, dans une
fenêtre popup (avec window.open), un sous-document .hta, Windows
l'interprète comme un téléchargement, avec message "parano", demande de
confirmation, etc.

Or, si j'ouvre le MEME fichier, en .htm, tout se passe bien, sans aucun
message. Mais on se trouve dans I.E.



Comment faire un "windows.open" (javascript), sur un .hta, sans que windows
ne croit qu'il s'agit d'un téléchargement local ?



@-salutations
--
Michel Claveau






Avatar
Do Re Mi chel La Si Do
Bonjour !

Merci. Mais j'ai peut-être oublié de préciser que je veux ouvrir des
fenêtres non modales. Les utilisateurs travaillent couramment avec 5 ou 6
fenêtres ouvertes (cela peut monter à une douzaine), et passent
indifféremment de l'une à l'autre.

Quand à lancer un autre process (WScript.Shell.Run, ou popen, ou spawn, ou,
mieux, subprocess), malheureusement, cela lance une autre session de mon
serveur COM (en background). Et, comme c'est ce dernier qui contient la
logique applicative, je limite cette possibilité au lancement de plusieurs
applications indépendantes. Surtout que, ensuite, l'utilisateur a une
floraison de fenêtres, et il ne sait plus laquelle est reliée à quoi.
En plus, cela pose des problèmes de communication entre les sessions.
Problèmes que je n'arrive à contourner qu'au travers d'un serveur TCP/IP
(local). Avantage, on peut faire de la communication entre applications
réparties sur plusieurs postes.
Pour en revenir à ma question du début, je sens mal d'ouvrir une session par
fenêtre.

Merci quand même de t'être penché sur mon problème.

Bonne journée.
--
Michel Claveau
Avatar
Jean
Bonjour,

"Do Re Mi chel La Si Do" a écrit dans le message de news:
%
Bonjour !

Merci. Mais j'ai peut-être oublié de préciser


On n'est jamais trop précis ... et un bout de code (même simpliste) pour illustrer la situation ne peut être que salutaire.

que je veux ouvrir des
fenêtres non modales.


Si l'exemple que je donnais utilise la méthode showModalDialog, j'indiquais aussi l'utilisation de la méthode showModelessDialog qui
fourni des
fenêtres non modales ...

Pour en revenir à ma question du début, je sens mal d'ouvrir une session par
fenêtre.


Voici un exemple qui utilise showModelessDialog.
http://automation.eu.tf/Maitre_1.HTA (voir code ci-dessous)
http://automation.eu.tf/Dialogue_1.HTA (voir code ci-dessous)
http://automation.eu.tf/Dialogue_2.HTA (voir code ci-dessous)

En cliquant sur le bouton qui se trouve dans maitre_1.hta vous ouvrez 2 autres HTA (dialogue_1.hta et dialogue_2.hta).
Dans chacun de ces HTA se trouve un bouton qui exécute soir Notepad, soit la calculatrice à l'aide de l'objet WScript.Shell (qui
correspnd ici à votre serveur com) déclaré dans Maitre_1.hta (il est passé en paramètre dans les méthodes showModelessDialog)
.
*Une et une seule instance (session) de l'objet est donc utilisée*.

Si vous fermez Maitre_1.hta, dialogue_1.hta et dialogue_2.hta se fermeront.

Les fêtes de fin d'année étant passées, je n'ai pas mis le gestion d'erreurs nécessaire pour traiter le cas où les fenêtre sont
fermées trop tôt, etc, ... dans l'exemple :-)

Copiez les 3 fichiers dans un répertoire.
Exécutez le fichier Maitre_1.HTA et cliquez sur le bouton qui s'y touve.
(Déplacez éventuellement les fenêtres si vous ne les voyez pas toutes ... les fêtes de fin d'années sont passées :-) )
Attendez et observez les changement de couleurs des fonds de fenêtre (pourtant les fêtes de fin d'années ... :-) )
Ensuite cliquez sur chacun des bouton dans Dialogue_1.hta et Dialogue_2.hta).

Voici les codes :

<!---8<---Maitre_1.HTA---Jean-JMST-Belgium--->
<script defer>
WS=new ActiveXObject('WScript.Shell')

function B1.onclick(){
w1=showModelessDialog('Dialogue_1.HTA',[window,WS])
w2=showModelessDialog('Dialogue_2.HTA',[window,WS])
setTimeout('w1.document.body.style.backgroundColor="silver"',3000)
setTimeout('w2.document.body.style.backgroundColor="orange"',5000)
}
</script>

<input
id±
type='button'
value='Ouvrir'
/>
<div>
Après avoir cliqué sur le bouton :<br />
La couleur de fond de Dialogue_1.hta sera
mise en gris dans 3 secondes.<br />
La couleur de fond de Dialogue_2.hta sera
mise en orange dans 5 secondes.
</div>
<!---8<---Maitre_1.HTA---Jean-JMST-Belgium--->

<!---8<---Dialogue_1.HTA---Jean-JMST-Belgium--->
<script defer>
setTimeout
(
'dialogArguments[0]'+
'.document'+
'.body'+
'.style'+
'.backgroundColor="lemonchiffon"'
,2000
)

function B1.onclick(){
dialogArguments[1].run('calc.exe')
}
</script>

<input
id±
type='button'
value "Exécuter la calculatrice avec l'instance de
l'objet WScript.Shell de Maitre_1.hta"
/>
<div>
La couleur de fond de Maitre.HTA
va être mise en jaune pâle dans 2 secondes.
</div>
<!---8<---Dialogue_1.HTA---Jean-JMST-Belgium--->

<!---8<---Dialogue_2.HTA---Jean-JMST-Belgium--->
<script defer>
setTimeout
(
'dialogArguments[0]'+
'.document'+
'.body'+
'.style'+
'.backgroundColor="violet"'
,4000
)

function B1.onclick(){
dialogArguments[1].run('notepad.exe')
}
</script>

<input
id±
type='button'
value "Exécuter Notepad avec l'instance de
l'objet WScript.Shell de Maitre_1.hta"
/>
<div>
La couleur de fond de Maitre.HTA
va être mise en violet dans 4 secondes.
</div>
<!---8<---Dialogue_2.HTA---Jean-JMST-Belgium--->


Merci quand même de t'être penché sur mon problème.



De rien.

Bonne journée.


Tout pareil.

--
Michel Claveau






Amicalement,

Jean - JMST
Belgium

Avatar
Do Re Mi chel La Si Do
Re !

Merci, mais, lorsque Maitre_1 ouvre Dialogue_1, on a plus accès à Maitre_1,
tant que l'on ne ferme pas Dialogue_1.
Là, on a une vision "hiérarchique" des fenêtres, alors que je travaille avec
une forme "réseau", où chaque fenêtre peut piloter n'importe quelle autre.

Mais, bon, ça fonctionne, avec le .htm ; je vais m'en contenter. Sinon,
j'ai aussi la possibilité d'ouvrir une fenêtre vide, et d'y insérer tout le
HTML, via outerHtml.

Laisse béton pour l'instant, et merci quand même.


Bonne soirée.
--
Michel Claveau
Avatar
Jean
Bonjour,

Merci, mais, lorsque Maitre_1 ouvre Dialogue_1, on a plus accès à Maitre_1,
tant que l'on ne ferme pas Dialogue_1.


On a accès à Maitre_1 (cf code ci-dessous : j'ai rajouté un peu de positionnement et un bouton dans Maitre_1 qui exécute Paint avec
l'instance de l'objet WScript.Shell définie dans Maitre_1 ... vous pouvez cliquer sur ce bouton quand les 2 autres fenêtres sont
ouvertes).
Par contre Maitre_1 ne prendra pas l'avant plan sur les 2 autres tant qu'elles sont ouvertes ... là il faut bidouiller.

Remplacez simplement le maitre_1 précédent par celui-ci :
http://automation.eu.tf/Maitre_1.HTA (code ci-dessous)

<!---8<---Maitre_1.HTA---Jean-JMST-Belgium--->
<script>
largeur=screen.width/3
hauteur=screen.height

resizeTo(largeur,hauteur)
moveTo(largeur,0)
</script>
<script defer>
WS=new ActiveXObject('WScript.Shell')

function B1.onclick(){
this.style.display='none'
w1=showModelessDialog
(
'Dialogue_1.HTA',
[window,WS],
'dialogTop:0;dialogHeight:'+
hauteur+
'px;dialogWidth:'+
largeur+
'px;dialogLeft:0'
)
w2=showModelessDialog
(
'Dialogue_2.HTA',
[window,WS],
'dialogTop:0;dialogHeight:'+
hauteur+
'px;dialogWidth:'+
largeur+
'px;dialogLeft:'+(largeur*2)
)
setTimeout('w1.document.body.style.backgroundColor="silver"',3000)
setTimeout('w2.document.body.style.backgroundColor="orange"',5000)
}

function B2.onclick(){
WS.run('pbrush.exe')
}
</script>

<input
id±
type='button'
value='Ouvrir'
/>

<div>
Après avoir cliqué sur le bouton Ouvrir:<br />
La couleur de fond de Dialogue_1.hta sera
mise en gris dans 3 secondes.<br />
La couleur de fond de Dialogue_2.hta sera
mise en orange dans 5 secondes.<br /><br />
Quand toutes les couleurs sont mises dans le fond des
différentes fenêtres cliquez sur le bouton ci-dessous.
</div>

<input
id²
type='button'
value="Exécuter Paint Brush
à l'aide de l'objet
WScript.Shell définit
dans ce document."
/>
<!---8<---Maitre_1.HTA---Jean-JMST-Belgium--->


Là, on a une vision "hiérarchique" des fenêtres, alors que je travaille avec
une forme "réseau", où chaque fenêtre peut piloter n'importe quelle autre.



Ici aussi ... mais il reste le "problème" du zIndex de la fenêtre principale.

Mais, bon, ça fonctionne, avec le .htm ; je vais m'en contenter. Sinon,
j'ai aussi la possibilité d'ouvrir une fenêtre vide, et d'y insérer tout le
HTML, via outerHtml.



Ou de faire un maitre_1 invisible qui exécute tout les hta avec showModelessDialog ... en mettant dans chaque HTA dans l'événement
onunload de leur fenêtre une routine pour fermer le maitre_1 invisible ...
Sinon ... tant que ça fonctionne ... on ne va pas chipoter :-)

Laisse béton pour l'instant,


Zut ... trop tard :O)

et merci quand même.



De rien.


Bonne soirée.


Tout pareil :-)

Amicalement,

Jean - JMST
Belgium

Avatar
GOWAP
J'en demandé pas autant, mais c'est rassurant de voir que le HTA n'est pas
qu'un virus en puissance.

J'ai pas tous compris quand même...

Moi, j'envisage de faire des petits programmes en HTA pour piloter des
création de compte utilisateur, réactiver les comptes vérouillé ...

Donc, j'ai besoin d'un environnement un peu mieux que le DOS, d'accédé a des
droits autres que l'utilisateur local (ou démarrant le HTA), c'est a dire
pouvoir executé des truc avec un utilisateur différent (en interne du
script, pas d'appel extérieux, je préfere).

Donc,

Puis-je appeler l'AD avec un HTA
Effectuer des changement sur l'AD (parcequ'au début de la réponse, il y Jean
qui dit que c'est de l'acces en lecteur seul)
J'ai pas l'acces au élément comme dans le Scripting Host
(wscript.exe/cscript.exe) ? ca veux dire quoi ?

le HTA, c'est plutot du HTL avec Script VBA ou c'est du VBS (a=application,
s=script d'administration) ; ou alors j'ai rien compris... mais je travail
sur la comprehension...


Merci déjà de tous ca...
GOWAP
Avatar
Jean
Bonjour,

parcequ'au début de la réponse, il y Jean
qui dit que c'est de l'acces en lecteur seul)


Je dis que les propriétés de la balise HTA ne sont accessibles par automation qu'en lecture seule.

Par exemple si vous définissez l'attribut windowState sur minimize dans la balise HTA, vous ne pourrez pas par la suite modifier cet
attribut via la propriété windowState (pour mettre la valeur sur maximize par ex.).

Le code suivant ne fonctionnera donc pas :
<hta:application id=oHTA windowstate="minimize" />
<script>
oHTA.windowState='maximize'
</script>

J'ai pas l'acces au élément comme dans le Scripting Host
(wscript.exe/cscript.exe) ?
ca veux dire quoi ?


Je disais que vous n'avez pas accès à l'objet (intrinsèque à WSH, non accessible via un progid) WScript.
Inutile par exemple de tenter un WScript.Sleep dans un HTA (en faisant une recherche sur ce groupe dans Google vous trouverez un
message que j'avais posté qui donne des solutions alternatives pour "pauser" un hta).


Amicalement,

Jean - JMST
Belgium

1 2