OVH Cloud OVH Cloud

[HTA] passage de paramètres (équivalent de "wscript.Arguments sous Wsh)

22 réponses
Avatar
sympatix
bonjour !

J'aurais besoin de passer en paramètres le path d'un dossier
dans une application HTA (en vbs),
en faisant un copier-coller du dit dossier sur mon fichier
HTA (exactement comme on peut faire un passage de paramètres en VbScript
sous Wsh, à l'aide de l'objet "Wscript.arguments", mais qui malheureusement,
n'est pas disponible dans un contexte HTA.
Est-ce faisable sans mettre en oeuvre une trop grosse usine à gaz, et si
oui, comment ?

merci d'avance :-)
--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

10 réponses

1 2 3
Avatar
sympatix
Il te suffit de rapprocher mon astuce (mot féminin), du truc (mot
masculin) de Fred. La nature (des choses) étant bien faite, cela donnera
de bons petits résultats.
Effectivement ils s'aiment ;-)


Voici le script (?) de Fred, légèrement retouché, pour répondre à ton
besoin. En le sauvant sous "args.hta", il pourra se faire draguer par
l'astuce précédente.
Oui, je confirme, il se fait bien draguer à chaque fois !

Merci de me macher le boulot...:-)
Mon problème était en fait lié au maniement du DOM pour récupérer les
infos des arguments (voir ma réponse à Fred pour plus de détails)

Donc, ça baigne !

Merci encore :-)
--
Cordialement
sympatix
Antispam: Supprimer les "toto" pour me répondre
"Michel Claveau" a écrit dans le message de news:
e$
Re (depuis un autre CPU)

Il te suffit de rapprocher mon astuce (mot féminin), du truc (mot
masculin) de Fred. La nature (des choses) étant bien faite, cela donnera
de bons petits résultats.

Voici le script (?) de Fred, légèrement retouché, pour répondre à ton
besoin. En le sauvant sous "args.hta", il pourra se faire draguer par
l'astuce précédente.

Michel Claveau.

___________________________________


<HTML>
<HEAD>
<HTA:APPLICATION ID="oHTA"
APPLICATIONNAME="myApp"



<SCRIPT language=Javascript>
var ligarg=oHTA.commandLine;

function ecritarg(){
pointe = document.getElementById('pecriture');
pointe.innerText = ligarg;
}
</SCRIPT>
</HEAD>

<BODY bgColor=#aabfbf scroll=no onload="ecritarg();">
<br>
La ligne de commande (avec arguments) est : <br>
<br><b>
&nbsp;&nbsp;<span id=pecriture>-Vide-</span>
</b><br>
</BODY>
</HTML>






Avatar
sympatix
Mais je pense que le problème de Sympatix est autre.
Mais non !

C'est pile poil ce qu'il me faut !
Enfin, presque, puisqu'il faut juste passer par un fichier tiers (le bat),
alors que j'aurais aimé glisser directement le dossier à traiter *sur le
hta*, mis à part ça, ça me convient parfaitement.
Mon problème était plutôt lié au maniement du DOM, avec lequel je ne suis
par encore très familiarisé, pour récupérer la chaine de(s) l'argument(s).

Maintenant, j'ai fais la même chose, mais en passant par un fichier vbs au
lieu d'un bat, et ça marche aussi.
(c'est juste un peu plus long, mais moi j'ai mieux travailler en vbs, j'ai
été élevé là dedans, et je m'y sent plus à l'aise qu'en bat ;-))

Au final, ça donne ça:

Dans un même répertoire, on a:
1: Un fichier args.vbs
2: Un fichier args.hta (celui de Michel)

On glisse simplement le dossier à traiter sur args.vbs, et ça roule.
----------Args.vbs----------
Set Arg = Wscript.Arguments
A = arg (0)
N = WScript.ScriptFullName
Rep = Left (N, InStrRev (N, ""))
Set oShell = CreateObject ("WScript.Shell")
oShell.Run Rep & "Args.hta " & A
----------Args.vbs----------

----------Args.hta-----------
<HTML>
<HEAD>
<HTA:APPLICATION ID="oHTA"
APPLICATIONNAME="myApp"



<SCRIPT language=Javascript>
var ligarg=oHTA.commandLine;

function ecritarg(){
pointe = document.getElementById('pecriture');
pointe.innerText = ligarg;
}
</SCRIPT>
</HEAD>

<BODY bgColor=#aabfbf scroll=no onload="ecritarg();">
<br>
La ligne de commande (avec arguments) est : <br>
<br><b>
&nbsp;&nbsp;<span id=pecriture>-Vide-</span>
</b><br>
</BODY>
</HTML>
----------Args.hta-----------

Merci :-)
--
Cordialement
sympatix
Antispam: Supprimer les "toto" pour me répondre

Avatar
Do Re Mi chel La Si Do
Re

Ne t'en fait pas pour le "quotage de goret". C'est une expression utilisée
par les fanatiques usenettiens, qui confondent newsgroups et usenet, et qui
l'utilisent pour tenter de cacher les (très) nombreux problèmes de usenet,
et son inadaptation aux techniques modernes (Html, démocratie, pièces
jointes, scripting, etc.)

En tant que pratiquant assidu des newsgroups libres (comme zoo-logique), je
ne supporte usenet qu'en tant que survivance, avec le respect que l'on doit
aux notions trop âgées, avec leurs handicaps inhérents.

D'ailleurs, si quelqu'un demandait la création d'un newsgroup sur le
scripting, sur zoo-logique, j'y participerais volontiers...

@-salutations
--
Michel Claveau
mél : http://cerbermail.com/?6J1TthIa8B
sites : http://mclaveau.com http://bergoiata.org http://ponx.org
newsgroups :
news://news.zoo-logique.org/programmation.Paradox (user: zoo
passe: entrer)
news://news.zoo-logique.org/éàç`?°çïa&ô|~?§@.µ#' (user: zoo
passe: entrer)
news://news.zoo-logique.org/langages-de-programmation (user: zoo
passe: entrer)
news://claveau.dnsalias.net/ponx (user: ponx passe: ponx)
etc.
Avatar
Do Re Mi chel La Si Do
Re !


Au passage bravo pour l'idée du bat




En fait, il y aurait d'autres moyens d'obtenir le même résultat : créer un
.EXE qui ne ferait que relayer les paramètres ; modifier le registre, pour
que Windows accepte .HTA comme extension exécutable, etc.

L'avantage du .BAT, c'est qu'il n'y a aucune modification de la config du
poste. Malheureusement, on est limité avec le nombre de paramètres (ou
alors, il faut ruser "méchant".

Les fichiers batch (.BAT) sont un peu à redécouvrir, car, depuis win-2000 et
win-XP, on a bénéficié de nombreux outils, nouveaux ou améliorés,
fonctionnant en mode console. Et puis, dans certain cas, la vitesse est
surprenante. Par exemple, j'ai essayé de récupérer le contenu d'un
répertoire, avec une demi-douzaine de langages (surtout des langages de
scripts) ; et bien, rien n'est aussi rapide que de récupérer DIR /B

Dès que les 35 h. (par jour) seront effectifs, je pondrai quelques pages
là-dessus...


@-salutations

Michel Claveau



Avatar
Do Re Mi chel La Si Do
Re-re...

Pour les espaces dans les noms de fichiers, pas de soucis, Windows se
chargeant d'ajouter des " (guillemets) pour encadrer les noms de
fichiers/répertoires.
Par contre, je n'ai pas testé, avec des noms de fichiers en Unicode.
Windows, en invite de commande, accroche souvent dans ce cas (même XCOPY se
plante).

re-re bon dimanche (et arrêtez ce ronflement de sieste ! Tous ces
re-re-re...)

Michel Claveau
Avatar
Fred
Dans son message
Do Re Mi chel La Si Do nous dit :

Re-re...

Pour les espaces dans les noms de fichiers, pas de soucis,
Windows se
chargeant d'ajouter des " (guillemets) pour encadrer les noms de
fichiers/répertoires.
Par contre, je n'ai pas testé, avec des noms de fichiers en
Unicode.
Windows, en invite de commande, accroche souvent dans ce cas
(même
XCOPY se plante).


Là j'ai testé quelque chose de vraiment surprenant.
J'avais aussi dans l'idée que cela planterait avec un nom de
fichier Unicode et un BAT.
J'ai écrit un BAT qui lance un VBS avec le paramètre qu'on lui a
passé. Le VBS affiche le paramètre que le BAT lui passe avec un
MsgBox. Programmation de haute-volée donc.
Si je dépose un fichier avec un nom Unicode sur le VBS, les
caractères sont remplacés par des points d'interrogation.
Si je dépose le même fichier sur le BAT cela *fonctionne* (le VBS
m'affiche le nom du fichier en clair !)
Alors que l'affichage des commande du BAT dans la fenêtre de
commande ne laisse apparaître que des petits rectangles.
Étonnant, non ?


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Outlook Express et les News : http://foleide.free.fr/prmoe.htm

Avatar
Fred
Dans son message
Do Re Mi chel La Si Do nous dit :

[...]

Les fichiers batch (.BAT) sont un peu à redécouvrir, car, depuis
win-2000 et win-XP, on a bénéficié de nombreux outils, nouveaux
ou
améliorés, fonctionnant en mode console. Et puis, dans certain
cas,
la vitesse est surprenante. Par exemple, j'ai essayé de
récupérer le
contenu d'un répertoire, avec une demi-douzaine de langages
(surtout
des langages de scripts) ; et bien, rien n'est aussi rapide que
de
récupérer DIR /B


Tout à fait convaincu !
Dans l'administration quotidienne j'utilise autant les fichiers
batch que les scripts.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Outlook Express et les News : http://foleide.free.fr/prmoe.htm

Avatar
Do Re Mi chel La Si Do
Salut !


Oui, c'est étonnant. Cependant, les fichiers batch (.BAT) utilisent cmd.exe
ou command.com
Or, l'aide de cmd (cmd /?) indique un paramètre /U pour utiliser Unicode. Il
suffirait que ce paramètre soit utilisé par défaut, pour que ceci explique
cela.

Enfin, je ne suis pas sûr...


Dans le même genre, je viens d'essayer à nouveau un .BAT qui plantait, avec
des fichiers en unicode (nom en cyrillique). Et bien, maintenant, ça passe !
Je soupçonne que cela vienne du SP-2. Mais, maintenant, XCOPY passe, y
compris avec des répertoires nommés en unicode.


@-salutations

Michel Claveau
Avatar
Jean
Oui, il n'y a pas de clé "DropHandler" sur les fichiers d'extension HTA


Mais on peut la créer (HKEY_CLASSES_ROOThtafileShellExDropHandler)
et mettre la même valeur (chaîne reg_sz) par défaut que celle utilisée
pour les fichiers js,vbs, ... :
{60254CA5-953B-11CF-8C96-00AA00B8708C}

Ou mettre celle des fichiers cmd,bat,exe, ... pour récupérer les noms
courts des fichiers :
{86C86720-42A0-1069-A2E8-08002B30309D}

Ce qui est illustré dans le fichier HTA suivant qui active (avec option
noms longs ou noms courts) ou désactive le glisser/déposer de fichiers
sur les fichiers HTA dans l'explorateur ou le bureau :

http://automation.eu.tf/HTA_Glisser_Deposer_ON_OFF.HTA
(voir code ci-dessous)

Pour tester faire glisser des fichiers sur le HTA suivant qui contient
une routine de récupération dans un tableau des chemins passés en
argument au HTA via le glisser/déposer :

http://automation.eu.tf/HTA_Glisser_Deposer_DEMO.HTA
(voir code ci-dessous)

<!---8<---HTA_Glisser_Deposer_ON_OFF.HTA---Jean-JMST-Belgium--->
<hta:application
ApplicationName='HTA Glisser Deposer'
SingleInstance='yes'
Border='none'
InnerBorder='no'
/>
<script language='vbs'>

'Active ou désactive la prise en charge
'du glisser/déposer de fichiers sur
'les fichiers HTA dans l'Explorateur ou le Bureau

Formater_Document
Ajouter_Retirer_DropHandler("")

Sub Ajouter_Retirer_DropHandler(valeur)
On Error Resume Next
clef1="HKEY_CLASSES_ROOThtafileShellEx"
clef2=clef1&"DropHandler"
With CreateObject("WScript.Shell")
If Not valeur="" Then _
.RegWrite clef2,valeur:Exit Sub
.RegRead clef2
If Err Then
Ajouter_Formulaire
Else
.RegDelete clef2
.RegDelete clef1
Document.Write "HTA : Glisser/Déposer désactivé"
SetTimeout "Close",1500
End If
End With
On Error GoTo 0
End Sub

Sub Formater_Document
ResizeTo 250,100
Centrer 250,100
Document.Write("<body></body>")
With Document.Body.Style
.FontFamily="verdana,arial"
.FontSize="10px"
.FontWeight="bold"
.TextAlign="center"
.OverFlow="hidden"
.BackgroundColor="lavender"
.Border="2 ridge silver"
End With
End Sub

Sub Ajouter_Formulaire
Ajouter_Radio("R1").Checked=True
Document.Write "Noms Longs<br />"
Ajouter_Radio("R1")
Document.Write "Nom Courts<br /><br />"
With Ajouter_Bouton("B1")
.Value="OK"
.OnClick=GetRef("Appliquer")
End With
With Ajouter_Bouton("B2")
.Value="Annuler"
.OnClick=GetRef("Fermer")
End With
End Sub

Sub Appliquer
If R1(0).Checked Then
'Noms Longs
Ajouter_Retirer_DropHandler _
("{60254CA5-953B-11CF-8C96-00AA00B8708C}")
Else
'Noms Courts
Ajouter_Retirer_DropHandler _
("{86C86720-42A0-1069-A2E8-08002B30309D}")
End If
Document.Body.InnerText=_
"HTA : Glisser/Déposer activé"
SetTimeout "Close",1500
End Sub

Function Ajouter_Radio(nom)
With Document
Set Ajouter_Radio=_
.Body.AppendChild _
(.CreateElement("<input type=radio name="&nom&" />"))
End With
End Function

Function Ajouter_Bouton(id)
With Document
Set Ajouter_Bouton=_
.Body.AppendChild _
(.CreateElement("<input type=button id="&id&" />"))
With Ajouter_Bouton.Style
.CssText=Document.Body.Style.CssText
.Cursor="hand"
End With
End With
End Function

Sub Centrer(largeur,hauteur)
With Screen
MoveTo (.Width-largeur)/2,(.Height-hauteur)/2
End With
End Sub

Sub Fermer
Close
End Sub
</script>
<!---8<---HTA_Glisser_Deposer_ON_OFF.HTA---Jean-JMST-Belgium--->

<!---8<---HTA_Glisser_Deposer_DEMO.HTA---Jean-JMST-Belgium--->
<hta:application id='HTA' />

<script language='vbs'>
'---DEMO---
ArgHTA=Arguments_HTA
Document.Write "Les arguments sont :<br />"
For i=0 To UBound(ArgHTA)
Document.Write ArgHTA(i)&"<br />"
Next
'---DEMO---

Function Arguments_HTA
'Retourne un tableau contenant les arguments
'passés au HTA lors d'un glisser/déposer de fichiers
'sur ce HTA dans l'Explorateur ou le Bureau
'
'Voir HTA_Glisser_Deposer_ON_OFF.VBS pour activer
'ou désactiver la prise en charge du glisser/déposer
'de fichiers sur les fichiers HTA dans l'Explorateur
'ou le Bureau

arguments=_
Replace(_
HTA.commandLine,_
""""&Unescape(Location.PathName)&"""",_
""_
)
t1=Split(arguments,"""",-1,1)
For i=0 To UBound(t1)
t1(i)=Trim(t1(i))
If t1(i)<>"" Then
If UBound(Split(t1(i),":"))>1 Then
t2=Split(t1(i)," ")
For j=0 To UBound(t2)
s=s&","&t2(j)
Next
Else
s=s&","&t1(i)
End If
End If
Next
Arguments_HTA=Split(Mid(s,2),",")
End Function
</script>
<!---8<---HTA_Glisser_Deposer_DEMO.HTA---Jean-JMST-Belgium--->

Amicalement,

--
Jean - JMST
Belgium

Avatar
Fred
Dans le messge : ,
Jean disait :
Oui, il n'y a pas de clé "DropHandler" sur les fichiers d'extension
HTA


Mais on peut la créer (HKEY_CLASSES_ROOThtafileShellExDropHandler)
et mettre la même valeur (chaîne reg_sz) par défaut que celle utilisée
pour les fichiers js,vbs, ... :
{60254CA5-953B-11CF-8C96-00AA00B8708C}

Ou mettre celle des fichiers cmd,bat,exe, ... pour récupérer les noms
courts des fichiers :
{86C86720-42A0-1069-A2E8-08002B30309D}



[Le code déjà dans les archives]

Merci beaucoup. J'avais essayé de trouver quelque chose en rapport avec
mshta.
Un post précieux :-)


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT


1 2 3