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

Le
Jean
Je n'ai pas encore pris le temps de commenter :

<!8<HTA_1.HTAJean-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úlse}
if(event.keyCode=){
if(test)
{testúlse}
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=)
{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± type='button'
value='[B1] Fond hta_2 en rouge' /><br />
<input id² type='button'
value='[B2] Executer HTA2_Fois_Six(7)' /><br />
<input id³ type='button'
value='[B3] Utiliser objet WS de HTA_2' /><br />
<input id´ type='button'
value='[B4] Afficher HTA_2' /><br />
<input idµ type='button'
value='[B5] Ecrire Bonjour dans HTA_2' /><br />
<input id¶ 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.HTAJean-JMST-Belgium>

<!8<HTA_2.HTAJean-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úlse}
if(event.keyCode=){
if(test)
{testúlse}
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=)
{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± type='button'
value='[B1] Fond hta_1 en vert' /><br />
<input id² type='button'
value='[B2] Executer HTA1_Cube(5)' /><br />
<input id³ type='button'
value='[B3] Utiliser objet FSO de HTA_1' /><br />
<input id´ type='button'
value='[B4] Afficher HTA_1' /><br />
<input idµ type='button'
value='[B5] Ecrire Salut dans HTA_1' /><br />
<input id¶ 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.HTAJean-JMST-Belgium>

Amicalement,

--
Jean - JMST
Belgium
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel Claveau
Le #650187
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
Michel Claveau
Le #650186
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
Jean
Le #650183
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

Jean
Le #650182
J'espère que cela ne posera pas de problème...


J'espère aussi :-)

Amicalement,

--
Jean - JMST
Belgium

Publicité
Poster une réponse
Anonyme