Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

HTA & VBS

4 réponses
Avatar
Julius Marcus
Bonjour,

J'ai quelques petits problemes pour concevoir un script hta intégrant du vbs
mon idée est de lancer un .hta avec une input texte pour y rentrer une
chaine de caracteres
un bouton valider qui appel la fonction en vbs( qui copie un fichier) dans
la page hta et un bouton annuler qui annul


donc en vbs j'utilise
fso.CopyFile strSourceFile, strFileName
ainsi que la ligne
wScript.Sleep pause * 10

par contre le script en vbs fonctionne bien mais des que je le colle dans la
partie :
<script language="VBScript">
<!--
Option Explicit
mes declations
mes fonctions

'-->
</script>



j'ai des retours d'erreur " objet requis: "

Si qqu a une info
Merci

4 réponses

Avatar
Méta-MCI
Salut !


HTA, c'est d'abord du HTML. Pour des raisons dites (par MS) "de sécurité",
les applications HTML (donc HTA) ne peuvent pas adresser directement le
système de fichiers local.

Il faut donc passer par WSH. On utilise alors quelques chose comme :
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
ou
Set oSH = CreateObject("Wscript.Shell" ) (là, on utilise ensuite
des commandes comme XCOPY)


@-salutations

Michel Claveau
Avatar
Philippe Majerus
donc en vbs j'utilise
fso.CopyFile strSourceFile, strFileName
ainsi que la ligne
wScript.Sleep pause * 10


L'environnement d'éxécution HTA n'as pas le même que WSH.
L'objet intégré WScript n'est pas disponible, car il fait partie de WSH. HTA
propose ses propres objets intégrés window et document (voir documentation
de Internet Explorer).
Ces limitations ne s'appliquent qu'aux objets intégrés aux environnements
d'éxécution, les objets externes sont quand à eux parfaitement utilisables
(ProgIDs "WScript.Shell" et "WScript.Netowork" pour WSH).

Pour créer un objet, il n'est donc pas possible d'utiliser
WScript.CreateObject, il faut utiliser la fonction CreateObject de VBScript
à la place. Contrairement à la version fournie par WScript, celle de
VBScript ne supporte pas la gestion des évènements, ou utiliser un tag
<object/> pour instancier l'objet en dehors du script et utiliser la gestion
des évènements de Internet Explorer (blocs de script avec attributs FOR et
EVENT).

WScript.Sleep n'est donc pas disponible non plus, voir window.setTimeout
pour lancer une fonction de script après un délais, ou window.setInterval
pour une éxécution répétée.


--
Philippe Majerus
Software, Documentation and stuff - http://www.phm.lu

Avatar
Philippe Majerus
HTA, c'est d'abord du HTML. Pour des raisons dites (par MS) "de sécurité",
les applications HTML (donc HTA) ne peuvent pas adresser directement le
système de fichiers local.


Il ne s'agit aucunement d'une limitation des HTA.
Contrairement à Internet Explorer, HTA exécute les script dans un contexte
de confiance, un moteur de script pourrait donc parfaitement fournir des
fonctions d'accès aux fichiers dans le cadre de scripts de confiance (tel
HTA ou WSH), et les interdire dans le cadre de script potentiellement
dangereux (IE).
Bien que les moteurs Active Scripting puissent savoir s'ils sont utilisés
dans un cadre de confiance ou non, les moteurs JScript et VBScript
n'incluent pas de fonctions pour traiter des fichiers et c'est l'objet
"Scripting.FileSystemObject" (FSO) qui fournis l'ensemble de ces fonctions
pour tous les moteurs, il s'agit donc d'une limitation générale de JScript
et VBScript, quel que soit leur environnement d'exécution.
A nouveau, le niveau de confiance est important, car FSO provoquera un
message d'allerte dans IE, alors qu'il fonctionne sans aucun problème dans
WSH et HTA du fait de la confiance attribuée à ces environnements.


Il faut donc passer par WSH. On utilise alors quelques chose comme :
Set fso=WScript.CreateObject("Scripting.FileSystemObject")


Ceci ne fonctionne que dans WSH, WScript étant un objet intégré a
l'environnement d'éxécution WSH.
Dans l'environnement HTA, cela provoque l'erreur "objet requis" dont parles
Julius.

ou
Set oSH = CreateObject("Wscript.Shell" ) (là, on utilise ensuite
des commandes comme XCOPY)


Ceci provoque l'affichage d'une fenêtre console, et demande de bonnes
conaissances pour éviter un bloquage du fait qu'il faut traiter le StdOut et
StdErr au fil de l'éxécution pour éviter le remplissement des buffers.

La solution est effectivement d'utiliser FSO, mais en utilisant la fonction
CreateObject de VBScript et non de WScript pour l'instancier.


--
Philippe Majerus
Software, Documentation and stuff - http://www.phm.lu

Avatar
Julius Marcus
Bonjour
et merci de l'info
si je résume
dans mon sript je remplace WScript.CreateObject par

Const OverwriteExisting = TRUE
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "C:Monfichier.txt" ,"D:SAUVEMonfichier.txt",
OverwriteExisting

Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile ("C:clienttest_file.txt")

et pour la pause
window.setTimeout ou window.setInterval
Merci






"Philippe Majerus" <Use: http://www.phm.lu/?action=email> a écrit dans le
message de news:
donc en vbs j'utilise
fso.CopyFile strSourceFile, strFileName
ainsi que la ligne
wScript.Sleep pause * 10


L'environnement d'éxécution HTA n'as pas le même que WSH.
L'objet intégré WScript n'est pas disponible, car il fait partie de WSH.
HTA propose ses propres objets intégrés window et document (voir
documentation de Internet Explorer).
Ces limitations ne s'appliquent qu'aux objets intégrés aux environnements
d'éxécution, les objets externes sont quand à eux parfaitement utilisables
(ProgIDs "WScript.Shell" et "WScript.Netowork" pour WSH).

Pour créer un objet, il n'est donc pas possible d'utiliser
WScript.CreateObject, il faut utiliser la fonction CreateObject de
VBScript à la place. Contrairement à la version fournie par WScript, celle
de VBScript ne supporte pas la gestion des évènements, ou utiliser un tag
<object/> pour instancier l'objet en dehors du script et utiliser la
gestion des évènements de Internet Explorer (blocs de script avec
attributs FOR et EVENT).

WScript.Sleep n'est donc pas disponible non plus, voir window.setTimeout
pour lancer une fonction de script après un délais, ou window.setInterval
pour une éxécution répétée.


--
Philippe Majerus
Software, Documentation and stuff - http://www.phm.lu