[HTA] cmdhlp.hta : adaptateur de l'aide de CMD.EXE
20 réponses
Jean
La conversation d' "hugguy" m'a rappelé qu'il y a quelques lunes
j'avais écrit un HTA (cmdhlp.hta) ,un adaptateur pour l'aide CMD.
Il est compatible Windows 2000 et XP tout langages.
Je n'ai pas encore eu l'occasion de le tester sous Vista pour apporter
des modifications éventuelles ... avec un peu de chance il fonctionnera
tel quel :-) :
<!---8<---CMDHLP.HTA---Jean-JMST-Belgium---8<--->
<script>
/*
Adaptateur pour l'aide CMD de Windows 2000/XP.
Ce fichier doit avoir une extension HTA pour fonctionner
correctement.
Les contenus affichés par ce fichier sont la propriété de
Microsoft® Corporation.
Des fichiers temporaires sont créés et effacés dans le même
répertoire que ce HTA.
L'utilisation de la méthode Exec et de la propriété StdOut
pourrait simplifier ce code et éviter l'utilisation de fichiers
temporaires mais ceci engendre l'apparition courte de
fenêtres CMD.
FSO est utilisé en lieu et place pour le confort visuel ;-)
/*
¤¤¤
Retrouve le répertoire du HTA
¤¤¤
*/
function get_HTA_directory(){
with(location.pathname){
r=lastIndexOf('\\')
return substr(0,r)
}
}
/*
¤¤¤
Construction de la liste des commandes
¤¤¤
*/
function get_commands_list(){
var s,RE,tempfile
tempfile=temp_name(htadir)
WS.Run('cmd.exe /c help > "'+tempfile+'"',0,true)
RE=new RegExp().compile("^[A-Z]{2,}")
with(FSO.OpenTextFile(tempfile)){
while(!AtEndOfStream){
s=ReadLine().split(' ')[0]
if(s!==''&&RE.test(s)){
with(TB0.insertRow().insertCell()){
innerText=s
if(is_internal_command(s)){
style.textDecoration='underline'
}
}
}
}
}
delete_file(tempfile)
}
/*
¤¤¤
Définition du contenu texte
¤¤¤
*/
function set_contents(){
D1.innerHTML=
'UTILISATION :<br>'+
'Cliquer sur un \u00E9l\u00E9ment de la liste pour afficher '+
'l\'aide de la commande dans cette fen\u00EAtre.<br>'+
'Faire un clic droit sur un \u00E9l\u00E9ment de la liste '+
'pour afficher l\'aide de la commande dans une console '+
'CMD.<br>'+
'Double cliquer sur la fen\u00EAtre principale pour copier '+
'son contenu dans le presse-papiers.<br>'+
'Les noms de commandes <u>soulign\u00E9s</u> sont des '+
'commandes <u>internes</u> de CMD, les autres sont des '+
'commandes externes.<br><br>'+
'NOTES :<br>'+
'Des fichiers temporaires sont cr\u00E9\u00E9s et '+
'effac\u00E9s dans le m\u00EAme r\u00E9pertoire que ce HTA.'+
'<br><br>'+
'L\'utilisation de la m\u00E9thode Exec et de la '+
'propri\u00E9t\u00E9 StdOut pourrait simplifier ce code et '+
'\u00E9viter l\'utilisation de fichiers temporaires mais '+
'ceci engendre l\'apparition courte de fen\u00EAtres CMD.<br>'+
'FSO est utilis\u00E9 en lieu et place pour le confort '+
'visuel ;-)<br><br>'+
'*** Compatible Windows 2000 et XP ***<br><br>'+
'Les contenus affich\u00E9s par ce fichier sont la '+
'propri\u00E9t\u00E9 de Microsoft® Corporation.'
D2.innerText='UTILISATION'
}
/*
¤¤¤
Définitions des tailles et positions
¤¤¤
*/
function set_D2_position(){
with(D1){
D2.style.right=(offsetWidth-clientWidth)+'px'
}
}
function set_div_size(){
var maxheight,maxwidth
with(document.body){
maxheight=clientHeight
maxwidth=clientWidth
}
D0.style.height=maxheight+'px'
with(D1.style){
width=(maxwidth-D0.style.pixelWidth)+'px'
height=maxheight+'px'
left=D0.style.pixelWidth
}
setTimeout('set_D2_position()',10)
}
/*
¤¤¤
Définitions des événements
¤¤¤
*/
function window.onresize(){
set_div_size()
}
function D1.ondblclick(){
if(D2.copy){return false}
D2.copy=D2.innerText
copy_to_clipboard(this.innerText)
D2.innerText='Copi\u00E9 dans le presse-papiers'
setTimeout('with(D2){innerText=copy;copy=""}',1200)
}
/*
¤¤¤
Gestion du contenu de l'aide
¤¤¤
*/
function show_help(topic,mode){
var c0,c1,c2,tempfile,windowState,bWaitOnReturn
tempfile=temp_name(htadir)
c0='c'
c1=''
c2='> "'+tempfile+'"'
windowState=0
bWaitOnReturn=true
if(mode){
c0='k'
c1=' title '+topic+'|'
c2=''
windowState=1
bWaitOnReturn=false
}
with(WS){
Environment('PROCESS')('PATH')=sysdir
Run(
'cmd.exe /T:31 /'+c0+c1+' help '+topic+c2,
windowState,
bWaitOnReturn
)
}
with(FSO){
if(FileExists(tempfile)){
D1.innerText=CVT.toUnicode(
OpenTextFile(tempfile).ReadAll(),
codepage
)
delete_file(tempfile)
}
}
D1.busy=''
}
/*
¤¤¤
Retrouve la page de code de la console
¤¤¤
*/
function get_dos_code_page(){
var r,tempfile
tempfile=temp_name(htadir)
WS.Run('cmd.exe /c chcp>"'+tempfile+'"',0,true)
r=FSO.OpenTextFile(tempfile).ReadLine().match(/[0-9]+/)
delete_file(tempfile)
return r
}
/*
¤¤¤
Détecte les commandes internes
¤¤¤
*/
function is_internal_command(cname){
var icom=sysdir+cname
if(FSO.FileExists(icom+'.exe')||FSO.FileExists(icom+'.com')){
return false
}
return true
}
/*
¤¤¤
Efface un fichier temporaire
¤¤¤
*/
function delete_file(filename){
with(FSO){
while(FileExists(filename)){
try{DeleteFile(filename)}catch(e){void true}
}
}
}
/*
¤¤¤
Copie le texte dans le presse-papiers
¤¤¤
*/
function copy_to_clipboard(txttocop){
clipboardData.setData('Text',txttocop)
}
/*
¤¤¤
Nom de fichier temporaire
¤¤¤
*/
function temp_name(directory){
with(FSO){
var r=directory+GetTempName()
while(FileExists(r)){
r=directory+GetTempName()
}
}
return r
}
Sous Vista, ça fonctionne... pas tout à fait aussi complètement.
Le script se lance, l'affichage est OK, les commandes courantes sont bien traitées.
Mais, pour plusieurs commandes (par exemple : drivequery, systeminfo) on se prend dans l'affichage un : " ... composant introuvable" "... framedynos.dll est introuvable..."
Je n'ai pas (encore) regardé l'intérieur du script. Je l'ai juste lancé, pour voir. Pour info : Vista Home Premium, loggué en Admin, avec l'UAC désactivé.
@+
Michel Claveau
Bonjour !
Sous Vista, ça fonctionne... pas tout à fait aussi complètement.
Le script se lance, l'affichage est OK, les commandes courantes sont bien
traitées.
Mais, pour plusieurs commandes (par exemple : drivequery, systeminfo) on se
prend dans l'affichage un :
" ... composant introuvable"
"... framedynos.dll est introuvable..."
Je n'ai pas (encore) regardé l'intérieur du script. Je l'ai juste lancé,
pour voir.
Pour info : Vista Home Premium, loggué en Admin, avec l'UAC désactivé.
Sous Vista, ça fonctionne... pas tout à fait aussi complètement.
Le script se lance, l'affichage est OK, les commandes courantes sont bien traitées.
Mais, pour plusieurs commandes (par exemple : drivequery, systeminfo) on se prend dans l'affichage un : " ... composant introuvable" "... framedynos.dll est introuvable..."
Je n'ai pas (encore) regardé l'intérieur du script. Je l'ai juste lancé, pour voir. Pour info : Vista Home Premium, loggué en Admin, avec l'UAC désactivé.
@+
Michel Claveau
hugguy
Bonjour
et merci
Je vien de tester, cela fonctionne sauf quleques ciommandes, (Manque Dll... erreur de script sur certaine commandes...)
Windows Vista pro avec l' UAC
Hugguy "Méta-MCI" a écrit dans le message de news:%
Bonjour !
Sous Vista, ça fonctionne... pas tout à fait aussi complètement.
Le script se lance, l'affichage est OK, les commandes courantes sont bien traitées.
Mais, pour plusieurs commandes (par exemple : drivequery, systeminfo) on se prend dans l'affichage un : " ... composant introuvable" "... framedynos.dll est introuvable..."
Je n'ai pas (encore) regardé l'intérieur du script. Je l'ai juste lancé, pour voir. Pour info : Vista Home Premium, loggué en Admin, avec l'UAC désactivé.
@+
Michel Claveau
Bonjour
et merci
Je vien de tester, cela fonctionne sauf quleques ciommandes, (Manque Dll...
erreur de script sur certaine commandes...)
Windows Vista pro avec l' UAC
Hugguy
"Méta-MCI" <enleverlesX.XmcX@XmclaveauX.com> a écrit dans le message de
news:%23ls8v6onHHA.4900@TK2MSFTNGP05.phx.gbl...
Bonjour !
Sous Vista, ça fonctionne... pas tout à fait aussi complètement.
Le script se lance, l'affichage est OK, les commandes courantes sont bien
traitées.
Mais, pour plusieurs commandes (par exemple : drivequery, systeminfo) on
se prend dans l'affichage un :
" ... composant introuvable"
"... framedynos.dll est introuvable..."
Je n'ai pas (encore) regardé l'intérieur du script. Je l'ai juste lancé,
pour voir.
Pour info : Vista Home Premium, loggué en Admin, avec l'UAC désactivé.
Je vien de tester, cela fonctionne sauf quleques ciommandes, (Manque Dll... erreur de script sur certaine commandes...)
Windows Vista pro avec l' UAC
Hugguy "Méta-MCI" a écrit dans le message de news:%
Bonjour !
Sous Vista, ça fonctionne... pas tout à fait aussi complètement.
Le script se lance, l'affichage est OK, les commandes courantes sont bien traitées.
Mais, pour plusieurs commandes (par exemple : drivequery, systeminfo) on se prend dans l'affichage un : " ... composant introuvable" "... framedynos.dll est introuvable..."
Je n'ai pas (encore) regardé l'intérieur du script. Je l'ai juste lancé, pour voir. Pour info : Vista Home Premium, loggué en Admin, avec l'UAC désactivé.
@+
Michel Claveau
Jean
Bonjour !
Sous Vista, ça fonctionne... pas tout à fait aussi complètement.
Le script se lance, l'affichage est OK, les commandes courantes sont bien traitées.
Mais, pour plusieurs commandes (par exemple : drivequery, systeminfo) on se prend dans l'affichage un : " ... composant introuvable" "... framedynos.dll est introuvable..."
Je n'ai pas (encore) regardé l'intérieur du script. Je l'ai juste lancé, pour voir. Pour info : Vista Home Premium, loggué en Admin, avec l'UAC désactivé.
@+
Michel Claveau
Merci pour le retour Michel.
Ce qui m'intérresserait c'est d'avoir le contenu de la commande HELP, donc le fichier de sortie obtenu avec :
cmd /c echo "help"|cmd.exe /u > help.txt
( A poster ici ou à )
A priori j'essayerais déjà en supprimant la ligne 298 :
Environment('PROCESS')('PATH')=sysdir
Ensuite je regarderais si ça "ne le perturbe pas" en la remplacant par :
Sous Vista, ça fonctionne... pas tout à fait aussi complètement.
Le script se lance, l'affichage est OK, les commandes courantes sont bien
traitées.
Mais, pour plusieurs commandes (par exemple : drivequery, systeminfo) on se
prend dans l'affichage un :
" ... composant introuvable"
"... framedynos.dll est introuvable..."
Je n'ai pas (encore) regardé l'intérieur du script. Je l'ai juste lancé, pour
voir.
Pour info : Vista Home Premium, loggué en Admin, avec l'UAC désactivé.
@+
Michel Claveau
Merci pour le retour Michel.
Ce qui m'intérresserait c'est d'avoir le contenu de la commande HELP,
donc le fichier de sortie obtenu avec :
cmd /c echo "help"|cmd.exe /u > help.txt
( A poster ici ou à jean.jmst@gmail.com )
A priori j'essayerais déjà en supprimant la ligne 298 :
Environment('PROCESS')('PATH')=sysdir
Ensuite je regarderais si ça "ne le perturbe pas" en la remplacant par
:
Sous Vista, ça fonctionne... pas tout à fait aussi complètement.
Le script se lance, l'affichage est OK, les commandes courantes sont bien traitées.
Mais, pour plusieurs commandes (par exemple : drivequery, systeminfo) on se prend dans l'affichage un : " ... composant introuvable" "... framedynos.dll est introuvable..."
Je n'ai pas (encore) regardé l'intérieur du script. Je l'ai juste lancé, pour voir. Pour info : Vista Home Premium, loggué en Admin, avec l'UAC désactivé.
@+
Michel Claveau
Merci pour le retour Michel.
Ce qui m'intérresserait c'est d'avoir le contenu de la commande HELP, donc le fichier de sortie obtenu avec :
cmd /c echo "help"|cmd.exe /u > help.txt
( A poster ici ou à )
A priori j'essayerais déjà en supprimant la ligne 298 :
Environment('PROCESS')('PATH')=sysdir
Ensuite je regarderais si ça "ne le perturbe pas" en la remplacant par :
::---8<---HELPTEXT.CMD---Jean-JMST-Belgium--- help > tmp.txt echo type tmp.txt|cmd.exe /u > help.txt del tmp.txt notepad help.txt ::---8<---HELPTEXT.CMD---Jean-JMST-Belgium---
Amicalement,
-- Jean - JMST Belgium
cmd /c echo "help"|cmd.exe /u > help.txt
Plutôt :
::---8<---HELPTEXT.CMD---Jean-JMST-Belgium---
help > tmp.txt
echo type tmp.txt|cmd.exe /u > help.txt
del tmp.txt
notepad help.txt
::---8<---HELPTEXT.CMD---Jean-JMST-Belgium---
::---8<---HELPTEXT.CMD---Jean-JMST-Belgium--- help > tmp.txt echo type tmp.txt|cmd.exe /u > help.txt del tmp.txt notepad help.txt ::---8<---HELPTEXT.CMD---Jean-JMST-Belgium---
Ensuite exécuter le HTA et vérifier qu'en cliquant (gauche et droit) sur ATTRIB c'est bien l'aide de ATTRIB.EXE qui s'affiche et pas celle de CHKDSK.EXE (... et vérifier que le reste fonctionne bien ...).
Amicalement,
-- Jean - JMST Belgium
Test ultime
Pour valider les tests 2 et 3 :
Créer un dossier C:APPLI
Y mettre une copie de CHKDSK.EXE et renommer le fichier en ATTRIB.EXE
Dans le HTA supprimer la ligne 298 et mettre après la ligne 57
(set_contents())
Ensuite exécuter le HTA et vérifier qu'en cliquant (gauche et droit)
sur ATTRIB c'est bien l'aide de ATTRIB.EXE qui s'affiche et pas celle
de CHKDSK.EXE (... et vérifier que le reste fonctionne bien ...).
Ensuite exécuter le HTA et vérifier qu'en cliquant (gauche et droit) sur ATTRIB c'est bien l'aide de ATTRIB.EXE qui s'affiche et pas celle de CHKDSK.EXE (... et vérifier que le reste fonctionne bien ...).