je cherche une solution d'équivalence pour récupérer un code "errorlevel"
sur un appel "MSHTA toto.hta".
En fait, je ne sais pas s'il y a un méthode comme le
wscript.quit(ValErrovel) pour le HTA.
Comment procédez-vous dans vos BATCH pour un traitement qui dépend de la
"réponse" du HTA ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Méta-MCI
Bonsoir !
AMHA, le plus simple, c'est de passer par un fichier batch temporaire.
Exemple (avec deux fichiers) :
toto2.bat : ::Envoi un paramètre (TOTO) à Toto2.hta ::Récupère, au retour de Toto2.hta, la variable VRET @echo off set TOTOªZZEERR toto2.hta call RETOUR.BAT echo VRET=%VRET% del RETOUR.BAT
Toto2.hta : <!-- Script HTA appelé par toto2.bat --> <HTML><BODY bgColor=#ffffaa> <DIV>Bla-bla-bla.<BR> Fermez la fenêtre, SVP.</DIV>
<script id="htenv" language=JavaScript> var wshell = new ActiveXObject("WScript.Shell"); var sysenv = wshell.Environment("PROCESS"); alert(sysenv("TOTO")); sysenv("TOTO")="AABBCCDDEE"; //Attention, l'affection n'a qu'une portée locale au script Toto2.hta alert(sysenv("TOTO"));
var fso = new ActiveXObject("Scripting.FileSystemObject"); var file = fso.OpenTextFile("retour.bat",2,1,0); file.Write("set VRETªZZEERRTTYYUUIIOOPP"); file.Close(); </script>
</BODY></HTML>
@-salutations -- Michel Claveau
Bonsoir !
AMHA, le plus simple, c'est de passer par un fichier batch temporaire.
Exemple (avec deux fichiers) :
toto2.bat :
::Envoi un paramètre (TOTO) à Toto2.hta
::Récupère, au retour de Toto2.hta, la variable VRET
@echo off
set TOTOªZZEERR
toto2.hta
call RETOUR.BAT
echo VRET=%VRET%
del RETOUR.BAT
Toto2.hta :
<!-- Script HTA appelé par toto2.bat -->
<HTML><BODY bgColor=#ffffaa>
<DIV>Bla-bla-bla.<BR>
Fermez la fenêtre, SVP.</DIV>
<script id="htenv" language=JavaScript>
var wshell = new ActiveXObject("WScript.Shell");
var sysenv = wshell.Environment("PROCESS");
alert(sysenv("TOTO"));
sysenv("TOTO")="AABBCCDDEE"; //Attention, l'affection n'a qu'une portée
locale au script Toto2.hta
alert(sysenv("TOTO"));
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.OpenTextFile("retour.bat",2,1,0);
file.Write("set VRETªZZEERRTTYYUUIIOOPP");
file.Close();
</script>
AMHA, le plus simple, c'est de passer par un fichier batch temporaire.
Exemple (avec deux fichiers) :
toto2.bat : ::Envoi un paramètre (TOTO) à Toto2.hta ::Récupère, au retour de Toto2.hta, la variable VRET @echo off set TOTOªZZEERR toto2.hta call RETOUR.BAT echo VRET=%VRET% del RETOUR.BAT
Toto2.hta : <!-- Script HTA appelé par toto2.bat --> <HTML><BODY bgColor=#ffffaa> <DIV>Bla-bla-bla.<BR> Fermez la fenêtre, SVP.</DIV>
<script id="htenv" language=JavaScript> var wshell = new ActiveXObject("WScript.Shell"); var sysenv = wshell.Environment("PROCESS"); alert(sysenv("TOTO")); sysenv("TOTO")="AABBCCDDEE"; //Attention, l'affection n'a qu'une portée locale au script Toto2.hta alert(sysenv("TOTO"));
var fso = new ActiveXObject("Scripting.FileSystemObject"); var file = fso.OpenTextFile("retour.bat",2,1,0); file.Write("set VRETªZZEERRTTYYUUIIOOPP"); file.Close(); </script>
</BODY></HTML>
@-salutations -- Michel Claveau
GOWAP
c'est à peut prêt l'idée que j'ai utilisé pour l'instant, même si je la trouve pas jolie. En fait je créer un fichier au nom de HTA.commandline + ".bat" ; comme ca, je suis sûr de ne pas faire des bêtises ; cependant, pour les appels de programme HTA via réseau en lecture seul, ca coince, peut-être faire un %temp%nom_prog_hta.bat
Sinon, je ne sais pas s'il y a une possibilité d'écrire une variable d'environnement qui resterait (permanente) même après la fin du HTA !
A++ GOWAP
"Méta-MCI" a écrit dans le message de news: eCdwG%
Bonsoir !
AMHA, le plus simple, c'est de passer par un fichier batch temporaire.
Exemple (avec deux fichiers) :
toto2.bat : ::Envoi un paramètre (TOTO) à Toto2.hta ::Récupère, au retour de Toto2.hta, la variable VRET @echo off set TOTOªZZEERR toto2.hta call RETOUR.BAT echo VRET=%VRET% del RETOUR.BAT
Toto2.hta : <!-- Script HTA appelé par toto2.bat --> <HTML><BODY bgColor=#ffffaa> <DIV>Bla-bla-bla.<BR> Fermez la fenêtre, SVP.</DIV>
<script id="htenv" language=JavaScript> var wshell = new ActiveXObject("WScript.Shell"); var sysenv = wshell.Environment("PROCESS"); alert(sysenv("TOTO")); sysenv("TOTO")="AABBCCDDEE"; //Attention, l'affection n'a qu'une portée locale au script Toto2.hta alert(sysenv("TOTO"));
var fso = new ActiveXObject("Scripting.FileSystemObject"); var file = fso.OpenTextFile("retour.bat",2,1,0); file.Write("set VRETªZZEERRTTYYUUIIOOPP"); file.Close(); </script>
</BODY></HTML>
@-salutations -- Michel Claveau
c'est à peut prêt l'idée que j'ai utilisé pour l'instant, même si je la
trouve pas jolie.
En fait je créer un fichier au nom de HTA.commandline + ".bat" ; comme ca,
je suis sûr de ne pas faire des bêtises ; cependant, pour les appels de
programme HTA via réseau en lecture seul, ca coince, peut-être faire un
%temp%nom_prog_hta.bat
Sinon, je ne sais pas s'il y a une possibilité d'écrire une variable
d'environnement qui resterait (permanente) même après la fin du HTA !
A++
GOWAP
"Méta-MCI" <enleverlesX.XmcX@XmclaveauX.com> a écrit dans le message de
news: eCdwG%23yNGHA.668@TK2MSFTNGP11.phx.gbl...
Bonsoir !
AMHA, le plus simple, c'est de passer par un fichier batch temporaire.
Exemple (avec deux fichiers) :
toto2.bat :
::Envoi un paramètre (TOTO) à Toto2.hta
::Récupère, au retour de Toto2.hta, la variable VRET
@echo off
set TOTOªZZEERR
toto2.hta
call RETOUR.BAT
echo VRET=%VRET%
del RETOUR.BAT
Toto2.hta :
<!-- Script HTA appelé par toto2.bat -->
<HTML><BODY bgColor=#ffffaa>
<DIV>Bla-bla-bla.<BR>
Fermez la fenêtre, SVP.</DIV>
<script id="htenv" language=JavaScript>
var wshell = new ActiveXObject("WScript.Shell");
var sysenv = wshell.Environment("PROCESS");
alert(sysenv("TOTO"));
sysenv("TOTO")="AABBCCDDEE"; //Attention, l'affection n'a qu'une
portée
locale au script Toto2.hta
alert(sysenv("TOTO"));
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.OpenTextFile("retour.bat",2,1,0);
file.Write("set VRETªZZEERRTTYYUUIIOOPP");
file.Close();
</script>
c'est à peut prêt l'idée que j'ai utilisé pour l'instant, même si je la trouve pas jolie. En fait je créer un fichier au nom de HTA.commandline + ".bat" ; comme ca, je suis sûr de ne pas faire des bêtises ; cependant, pour les appels de programme HTA via réseau en lecture seul, ca coince, peut-être faire un %temp%nom_prog_hta.bat
Sinon, je ne sais pas s'il y a une possibilité d'écrire une variable d'environnement qui resterait (permanente) même après la fin du HTA !
A++ GOWAP
"Méta-MCI" a écrit dans le message de news: eCdwG%
Bonsoir !
AMHA, le plus simple, c'est de passer par un fichier batch temporaire.
Exemple (avec deux fichiers) :
toto2.bat : ::Envoi un paramètre (TOTO) à Toto2.hta ::Récupère, au retour de Toto2.hta, la variable VRET @echo off set TOTOªZZEERR toto2.hta call RETOUR.BAT echo VRET=%VRET% del RETOUR.BAT
Toto2.hta : <!-- Script HTA appelé par toto2.bat --> <HTML><BODY bgColor=#ffffaa> <DIV>Bla-bla-bla.<BR> Fermez la fenêtre, SVP.</DIV>
<script id="htenv" language=JavaScript> var wshell = new ActiveXObject("WScript.Shell"); var sysenv = wshell.Environment("PROCESS"); alert(sysenv("TOTO")); sysenv("TOTO")="AABBCCDDEE"; //Attention, l'affection n'a qu'une portée locale au script Toto2.hta alert(sysenv("TOTO"));
var fso = new ActiveXObject("Scripting.FileSystemObject"); var file = fso.OpenTextFile("retour.bat",2,1,0); file.Write("set VRETªZZEERRTTYYUUIIOOPP"); file.Close(); </script>
</BODY></HTML>
@-salutations -- Michel Claveau
Méta-MCI
Bonsoir !
Pour garder la persistance, de l'affectation d'une variable d'environnement, après la fin d'un .HTA, il faudrait que le HTA soit lancé dans le même processus que le batch.
Et, effectivement, je ne crois pas que ce soit possible. Quoique... J'ai peut-être une idée, mais difficile à tester : utiliser un composant (serveur) COM singleton, appelé par le batch, ET par le .HTA. Le comportement singleton entraînerait l'unicité de l'instanciation, ce qui règlerait le problème.
Malheureusement, je ne sais pas faire de serveur COM singleton... Il serait toujours possible de tester avec Word, mais ça semble un peu lourd.
@-salutations
Michel Claveau
Bonsoir !
Pour garder la persistance, de l'affectation d'une variable d'environnement,
après la fin d'un .HTA, il faudrait que le HTA soit lancé dans le même
processus que le batch.
Et, effectivement, je ne crois pas que ce soit possible.
Quoique... J'ai peut-être une idée, mais difficile à tester : utiliser un
composant (serveur) COM singleton, appelé par le batch, ET par le .HTA. Le
comportement singleton entraînerait l'unicité de l'instanciation, ce qui
règlerait le problème.
Malheureusement, je ne sais pas faire de serveur COM singleton... Il serait
toujours possible de tester avec Word, mais ça semble un peu lourd.
Pour garder la persistance, de l'affectation d'une variable d'environnement, après la fin d'un .HTA, il faudrait que le HTA soit lancé dans le même processus que le batch.
Et, effectivement, je ne crois pas que ce soit possible. Quoique... J'ai peut-être une idée, mais difficile à tester : utiliser un composant (serveur) COM singleton, appelé par le batch, ET par le .HTA. Le comportement singleton entraînerait l'unicité de l'instanciation, ce qui règlerait le problème.
Malheureusement, je ne sais pas faire de serveur COM singleton... Il serait toujours possible de tester avec Word, mais ça semble un peu lourd.
@-salutations
Michel Claveau
Jean
Sinon, je ne sais pas s'il y a une possibilité d'écrire une variable d'environnement qui resterait (permanente) même après la fin du HTA !
Ben, non. L'affectation d'une variable d'environnement ne résistera pas à la fermeture du script .HTA Plus exactement, avec "USER", on aura des variables d'environnement différentes, dans le batch et le .HTA Alors que, avec "PROCESS", le .HTA "héritera" la valeur affectée par le batch, mais, s'il l'affecte, cela restera localisé au .HTA
@-salutations
Michel Claveau
Bonjour !
Ben, non.
L'affectation d'une variable d'environnement ne résistera pas à la fermeture
du script .HTA
Plus exactement, avec "USER", on aura des variables d'environnement
différentes, dans le batch et le .HTA
Alors que, avec "PROCESS", le .HTA "héritera" la valeur affectée par le
batch, mais, s'il l'affecte, cela restera localisé au .HTA
Ben, non. L'affectation d'une variable d'environnement ne résistera pas à la fermeture du script .HTA Plus exactement, avec "USER", on aura des variables d'environnement différentes, dans le batch et le .HTA Alors que, avec "PROCESS", le .HTA "héritera" la valeur affectée par le batch, mais, s'il l'affecte, cela restera localisé au .HTA
@-salutations
Michel Claveau
Jean
Plus exactement, avec "USER", on aura des variables d'environnement différentes, dans le batch et le .HTA
Ca c'est toute une histoire :-)
A priori je ne pense pas que ce soit une bonne idée d'utiliser des variables d'envirronement.
Mais a-t-il vraiment besoin d'un hta ? ... ou : a-t-il vraiment besoin d'un batch ? ...
Sans savoir ce qu'il veut faire exactement ... difficile à dire :-)
Amicalement,
-- Jean - JMST Belgium
Plus exactement, avec "USER", on aura des variables d'environnement
différentes, dans le batch et le .HTA
Ca c'est toute une histoire :-)
A priori je ne pense pas que ce soit une bonne idée d'utiliser des
variables d'envirronement.
Mais a-t-il vraiment besoin d'un hta ? ... ou : a-t-il vraiment besoin
d'un batch ? ...
Sans savoir ce qu'il veut faire exactement ... difficile à dire :-)
<HTML> <HTA:APPLICATION ID="oHTA" ID="b12HTA" SCROLL="No" SINGLEINSTANCE="yes" CAPTION="yes" BORDER="thin" BORDERSTYLE="complex" CAPTION="yes" CONTEXTMENU="yes" INNERBORDER="no" MAXIMIZEBUTTON="no" MINIMIZEBUTTON="no" NAVIGABLE="no" SCROLL="no" SCROLLFLAT="no" SELECTION="no" SHOWINTASKBAR="yes" SINGLEINSTANCE="yes" SYSMENU="yes" WINDOWSTATE="normal"> <head><TITLE>l'Ecran Noir, version 'Luxe'</TITLE></head> <BODY bgColor=#ffffcc onload="ENinit();"> <DIV ID="TOTO" alignÎnter><STRONG><EM><BR><FONT color=#ff0000 size=4>Salut, lecteur de l'</FONT><FONT color=#000000 size=4> Ecran Noir ! </FONT><BR><BR> <BR><FONT color=#000080>Cette page est un exemple d'utilisation<BR>d'un HTA</FONT> par un Batch.<BR><BR><BR> <FONT color=#8888cc>Et, voici le message tapé : </FONT><BR><FONT color=#880000><DIV ID=PARAM>XXX<BR></DIV></FONT></DIV> <SCRIPT language=JavaScript> function ENinit(){self.resizeTo(340,255); var ligarg=oHTA.commandLine; var i=ligarg.slice(1,255).indexOf("""); var pointeur=document.getElementById('PARAM'); pointeur.innerText=ligarg.slice(i+3,255) + " ";} </SCRIPT></BODY></HTML>
Ca a l'air bien :-) ... (j'avoue, je n'ai pas essayé) Le principe est intérressant (je crois que j'aurais utilisé des echo pour générer le hta).
Je crois aussi qu'en utilisant ::::: à la place des 5 espaces on peut éviter un goto.
Ne faut-t-il pas faire start /w %TEMP%tmp.hta %MSG% avant d'effacer le hta ?
Le "find /v pas moi" ... à première vue je ne comprends pas trop a quoi il sert.
Amicalement,
-- Jean - JMST Belgium
Méta-MCI
Bonsoir !
j'aurais utilisé des echo pour générer le hta
Possible, mais, AMHA, moins lisible.
Je crois aussi qu'en utilisant ::::: à la place des 5 espaces on peut éviter un goto.
Oui ; mais il y a plus d'éditeurs qui permettent de d'indenter des blocs avec des espaces, ce qui est moins fatiguant...
Ne faut-t-il pas faire start /w %TEMP%tmp.hta %MSG% avant d'effacer le hta ?
Le start /W est jouable. Mais l'appel direct attend aussi. Reste à savoir si on veut rester dans le même processus. Tout dépend de l'utilisation. On peut aussi envisager un START sans WAIT, et simuler du multi-tâches-Batch (fô alors pas deleter intempestivement).
Le "find /v pas moi" ... à première vue je ne comprends pas trop a quoi il sert.
C'est pour éliminer la ligne du FIND, qui contient (aussi) les espaces (critère de sélection des lignes). Et, ça c'est un piège/effet de bord classique, que l'on élimine vite fait au premier déboguage.
Amicalement (et tchin-tchin) aussi !
MCI
Bonsoir !
j'aurais utilisé des echo pour générer le hta
Possible, mais, AMHA, moins lisible.
Je crois aussi qu'en utilisant ::::: à la place des 5 espaces on peut
éviter un goto.
Oui ; mais il y a plus d'éditeurs qui permettent de d'indenter des blocs
avec des espaces, ce qui est moins fatiguant...
Ne faut-t-il pas faire start /w %TEMP%tmp.hta %MSG% avant d'effacer le
hta ?
Le start /W est jouable. Mais l'appel direct attend aussi. Reste à savoir si
on veut rester dans le même processus. Tout dépend de l'utilisation. On peut
aussi envisager un START sans WAIT, et simuler du multi-tâches-Batch (fô
alors pas deleter intempestivement).
Le "find /v pas moi" ... à première vue je ne comprends pas trop a quoi
il sert.
C'est pour éliminer la ligne du FIND, qui contient (aussi) les espaces
(critère de sélection des lignes). Et, ça c'est un piège/effet de bord
classique, que l'on élimine vite fait au premier déboguage.
Je crois aussi qu'en utilisant ::::: à la place des 5 espaces on peut éviter un goto.
Oui ; mais il y a plus d'éditeurs qui permettent de d'indenter des blocs avec des espaces, ce qui est moins fatiguant...
Ne faut-t-il pas faire start /w %TEMP%tmp.hta %MSG% avant d'effacer le hta ?
Le start /W est jouable. Mais l'appel direct attend aussi. Reste à savoir si on veut rester dans le même processus. Tout dépend de l'utilisation. On peut aussi envisager un START sans WAIT, et simuler du multi-tâches-Batch (fô alors pas deleter intempestivement).
Le "find /v pas moi" ... à première vue je ne comprends pas trop a quoi il sert.
C'est pour éliminer la ligne du FIND, qui contient (aussi) les espaces (critère de sélection des lignes). Et, ça c'est un piège/effet de bord classique, que l'on élimine vite fait au premier déboguage.