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

Michel, des fenêtres qui ouvrent des portes ...

4 réponses
Avatar
Jean
Je n'ai pas encore pris le temps de commenter :

<!---8<---HTA_1.HTA---Jean-JMST-Belgium--->
<!--
Démo de communication entre 2 HTA
***Nécessite HTA_2.HTA***
Placez HTA_1.HTA et HTA_2.HTA dans un répertoire
et exécutez HTA_1.HTA
-->

<hta:application applicationname='HTA1' singleinstance='yes' />

<title>HTA_1</title>
<script>
function window.onerror(a,b,c){return false}
</script>
<script defer language='jscript'>

anticrash('PROXY_HTA')

IE=new ActiveXObject('InternetExplorer.Application')
IE.navigate('about:blank')
while(IE.busy){void true}
W=IE.document.parentWindow
W.name='PROXY_HTA'
W.hta_1=window.document

new ActiveXObject('WScript.Shell').run('hta_2.hta')
while(!W.hta_2){void true}

HTA2DOC=W.hta_2
HTA2WIN=HTA2DOC.parentWindow

FSO=new ActiveXObject('Scripting.FileSystemObject')

with(txtrcv.style){
backgroundColor='skyblue'
width='100%'
height='1ex'
}

with(hta1txt){
contentEditable=true
with(style){
backgroundColor='lemonchiffon'
width='100%'
height='1ex'
border='2 silver dotted'
}
}

function hta1txt.onkeydown(){
try{eval(test)}catch(e){test=false}
if(event.keyCode==13){
if(test)
{test=false}
else{
event.keyCode=0
new ActiveXObject('WScript.Shell').SendKeys('+~')
test=true
return false
}
}
}

function hta1txt.onkeyup(){
HTA2WIN.txtrcv.innerHTML=event.srcElement.innerHTML
if(event.keyCode==13)
{HTA2WIN.txtrcv.appendChild(HTA2DOC.createElement('br'))}
}

function B1.onclick(){
HTA2DOC.body.style.backgroundColor='red'
}

function B2.onclick(){
alert(HTA2WIN.HTA2_Fois_Six(7))
}

function B3.onclick(){
alert(HTA2WIN.WS.CurrentDirectory)
}

function B4.onclick(){
new ActiveXObject('WScript.Shell').AppActivate('HTA_2')
}

function B5.onclick(){
with(HTA2DOC){
body.appendChild(createElement('br'))
body.appendChild(createElement('b')).innerText='Bonjour'
}
}

function B6.onclick(){
collin=document.all.tags('input')
for(i=0;i<collin.length;i++){collin[i].disabled=true}
hta1txt.disabled=true
HTA2WIN.close()
}

function HTA1_Cube(nombre){
return nombre*nombre*nombre
}

function anticrash(nom){
var windows=new Enumerator(
new ActiveXObject('Shell.Application')
.Windows()
)
for(;!windows.atEnd();windows.moveNext()){
var win=windows.item().document.parentWindow
if(win)
{if(win.name==nom){var k=window.open('',nom);k.close()}}
}
}
</script>

<h1>HTA_1</h1>
<input id=B1 type='button'
value='[B1] Fond hta_2 en rouge' /><br />
<input id=B2 type='button'
value='[B2] Executer HTA2_Fois_Six(7)' /><br />
<input id=B3 type='button'
value='[B3] Utiliser objet WS de HTA_2' /><br />
<input id=B4 type='button'
value='[B4] Afficher HTA_2' /><br />
<input id=B5 type='button'
value='[B5] Ecrire Bonjour dans HTA_2' /><br />
<input id=B6 type='button'
value='[B6] Fermer hta_2' />
<div>
Le texte écrit dans le champ ci-dessous sera écrit dans HTA_2
</div>
<div id=hta1txt></div>
<div>Texte reçu de HTA_2 :</div>
<div id=txtrcv></div>
<!---8<---HTA_1.HTA---Jean-JMST-Belgium--->

<!---8<---HTA_2.HTA---Jean-JMST-Belgium--->
<!--
Démo de communication entre 2 HTA
***Nécessite HTA_1.HTA***
Placez HTA_1.HTA et HTA_2.HTA dans un répertoire
et exécutez HTA_1.HTA
-->

<hta:application applicationname='HTA2' singleinstance='yes' />

<title>HTA_2</title>

<script defer language='jscript'>

W=window.open('','PROXY_HTA')
W.hta_2=window.document
HTA1DOC=W.hta_1
HTA1WIN=HTA1DOC.parentWindow
HTA1WIN.IE.Quit()

WS=new ActiveXObject('WScript.Shell')

with(txtrcv.style){
backgroundColor='skyblue'
width='100%'
height='1ex'
}

with(hta2txt){
contentEditable=true
with(style){
backgroundColor='lemonchiffon'
width='100%'
height='1ex'
border='2 silver dotted'
}
}

function hta2txt.onkeydown(){
try{eval(test)}catch(e){test=false}
if(event.keyCode==13){
if(test)
{test=false}
else{
event.keyCode=0;
new ActiveXObject('WScript.Shell').SendKeys('+~');
test=true;
return false
}
}
}

function hta2txt.onkeyup(){
HTA1WIN.txtrcv.innerHTML=event.srcElement.innerHTML
if(event.keyCode==13)
{HTA1WIN.txtrcv.appendChild(HTA1DOC.createElement('br'))}
}

function HTA2_Fois_Six(nombre){
return nombre*6
}

function B1.onclick(){
HTA1DOC.body.style.backgroundColor='green'
}

function B2.onclick(){
alert(HTA1WIN.HTA1_Cube(5))
}

function B3.onclick(){
alert(HTA1WIN.FSO.GetFile('hta_2.hta').Path)
}

function B4.onclick(){
new ActiveXObject('WScript.Shell').AppActivate('HTA_1')
}

function B5.onclick(){
with(HTA1DOC){
body.appendChild(createElement('br'))
body.appendChild(createElement('b')).innerText='Salut'
}
}

function B6.onclick(){
collin=document.all.tags('input')
for(i=0;i<collin.length;i++){collin[i].disabled=true}
hta2txt.disabled=true
HTA1WIN.close()
}

</script>

<h1>HTA_2</h1>
<input id=B1 type='button'
value='[B1] Fond hta_1 en vert' /><br />
<input id=B2 type='button'
value='[B2] Executer HTA1_Cube(5)' /><br />
<input id=B3 type='button'
value='[B3] Utiliser objet FSO de HTA_1' /><br />
<input id=B4 type='button'
value='[B4] Afficher HTA_1' /><br />
<input id=B5 type='button'
value='[B5] Ecrire Salut dans HTA_1' /><br />
<input id=B6 type='button'
value='[B6] Fermer hta_1' />
<div>
Le texte écrit dans le champ ci-dessous sera écrit dans HTA_1
</div>
<div id=hta2txt></div>
<div>Texte reçu de HTA_1 :</div>
<div id=txtrcv></div>

<!---8<---HTA_2.HTA---Jean-JMST-Belgium--->

Amicalement,

--
Jean - JMST
Belgium

4 réponses

Avatar
Michel Claveau
Bonjour !

Excellent !

Il va falloir que j'examine le code-source, notamment l'anticrash ;
mais l'idée d'un proxy (intermédiaire), pour passer des références
d'objets me parait très bonne.

Malheureusement, je suis actuellement assez pris par le développement
d'un wrapper du BDE, en Python (+ctypes), et je voulais faire un truc
pour RuPy ; mais j'espère bien trouver un moment, dans les semaines qui
viennent...






--
@-salutations

Michel Claveau
Avatar
Michel Claveau
Re !

Vu l'intérêt de la chose, je me suis permis de poster un message dans
le newsgroup ponx du zoo.

J'espère que cela ne posera pas de problème...





--
@-salutations

Michel Claveau
Avatar
Jean
notamment l'anticrash


J'aurais pu le retirer, c'est surtout utile lors du développement.
Il se peut qu'en cours de bidouille l'instance d'ie n'ai pas été
fermée.
Ca ferme cette instance si elle existe au début de l'exécution du
projet exemple.

Amicalement,

--
Jean - JMST
Belgium

Avatar
Jean
J'espère que cela ne posera pas de problème...


J'espère aussi :-)

Amicalement,

--
Jean - JMST
Belgium