OVH Cloud OVH Cloud

Activer / Désactiver Javascript par script ??

18 réponses
Avatar
teddy
Bonjour,

Je cherche comment créer un script VBS ou PowerShell qui active / désactive
le Javascript dans Internet Explorer comme un "interrupteur" c'est à dire à
la demande.

Le but est d'empêcher une application intranet très mal programmée (par une
SSII !) de faire passer intempestivement en avant-plan une fenêtre "mère"
alors que l'on est en pleine saisie d'un formulaire dans une fenêtre
"fille".
A noter qu'un script JS ferme aussi toutes les fenêtres "filles" si on ferme
cette fenêtre "mère" (on doit donc normalement la garder ouverte en
arrière-plan).

En fait, il s'agit peut-être d'agir sur une ou plusieurs clés de la BDR si
toutefois les paramètres de réglage de IE sont bien stockés ici (??).

Des idées ?

Ted

8 réponses

1 2
Avatar
teddy
Merci.
Je vais voir que c'est !
J'utilise déjà WinTask 3.3a de TaskWare qui est puissant mais qui ne fait
pas tout...

Ted

"Michel Claveau" <Enleverles a écrit dans le
message de news:
L'utilitaire :
http://mclaveau.com/gvrac/wfocus.exe

Le code-source :
http://mclaveau.com/gvrac/wfocus.au3

Mais, tu risques d'être déçu, car c'est de l'AutoIt...






--
@-salutations

Michel Claveau




Avatar
teddy
Merci Jean pour votre suggestion.
Je vais tester ce VBS demain mais en général le "AppActivate" m'a déjà posé
des problèmes de fonctionnement dans d'autres programmes.

Je précise qu'il s'agit bien d'une application intranet développée en ASP
sur laquelle je n'ai aucune action possible !
Donc pas question d'enlever un "OnBlur" ou un "OnFocus".
En plus, chaque page de l'application est truffée de frames et réagit au
moindre clic avec des fct Javascript contenues en partie dans un fichier JS
à part.
C'est une vraie "usine à gaz" (oeuvre d'une SSII très connue) dont je ne
récupère qu'une partie du code dans le dossier "Temporary Internet Files"
d'Internet Explorer 6 sous XP PRO pour essayer d'en comprendre le
(dys)fonctionnement :-|

Ted



"Jean" a écrit dans le message de news:

Voici le code d'une petite partie de la page DHTML (page ASP côté
serveur) dont une zone de saisie (champ date) récupéré dans un fichier
temporaire de IE6. Je l'ai "décortiqué" avec Dreamweaver.

Début de page et du formulaire :

function verifBack(){if(event.keyCode == '8'){alert('La fonction 'Back'
ou 'Précédent' est interdite');event.keyCode = 0;}}document.onkeydown =
toucheenfoncee;
if (document.all) {
document.oncontextmenu=clicker;}
</SCRIPT>
</HEAD>
<BODY TOPMARGIN=0 LEFTMARGIN=0 onKeydown=verifBack();>
<FORM METHOD=POST
ACTION="/binOce/FR/Ticket/Detail/Traitement/TrtTic_Dat.asp?COOKIENAME=ticketOce&NUMFEN=1&TicketSupport="
NAME=FORMTicCau language=javascript OnSubmit='return attends();'>

Le code DHTML du champ à saisir :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onFocus='textfocus=1;' onBlur='textfocus=0;'
onKeyDown='event.cancelBubble=true'>

Dès que l'on commence à écrire dans ce champ 'DATRETTIC1', la fenêtre du
formulaire "saute" 1 fois sur 2, la fenêtre "mère" passe en avant-plan.



J'esseyarais déjà en retirant les événements onfocus et onblur de
DATRETTIC1, soit :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onKeyDown='event.cancelBubble=true' />

Je vois aussi qu'il interdit de presser sur la touche espace arrière (code
touche 8) qui est le raccourci clavier de "précédent" dans l'historique
d'un navigateur.
Ca n'empêche pas l'utilisation de "précédent" dans l'historique via la
souris (mais c'est peut être géré ailleurs dans la script) ou via la
touche "précédent" d'un clavier multimédia (code touche 166).

Mais bon il manque des fonctions, il faudrait voir aussi ce que font
toucheenfoncee() et attends() par ex.
Come vous dites que des problèmes surviennent "Dès que l'on commence à
écrire ..." les événement claviers (onkeydown, onkeyup, ...) sont à
prendre en considération.
Bref sans avoir une vue plus générale du script ...

Je pense réduire la fenêtre mère avec une fonction qui emploierait des
API (FindWindow, SetWindowsPos, etc...) mais en VB ou C++
Sinon, via un simple script VBS ou JS, je ne peux pas agir sur les
fenêtres ?

Qu'en pensez-vous ?

Ted



Franchement je trouve que le mieux serait la correction du code .

Sinon, oui il est *probablement* possible de faire une code VBS ou JS qui
"intercepterait" la fenêtre, en partant de la propriété Windows de l'objet
Shell.Application par exemple un truc dans ce genre ci :

'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---
'~~~~TEST~~~~
Set fenetre=Prendre_Fenetre_IE("file:///K:/fichier.htm")
Afficher_Fenetre fenetre
'~~~~TEST~~~~

Sub Afficher_Fenetre(fen)
If LCase(TypeName(fenetre))="nothing" Then Exit Sub
fen.Document.Focus
With CreateObject("WScript.Shell")
If fen.Document.Title="" Then Exit Sub
While Not .AppActivate(fen.Document.Title)
.AppActivate fen.Document.Title
Wend
End With
End Sub

Function Prendre_Fenetre_IE(url)
Set Prendre_Fenetre_IE=Nothing
For Each W In CreateObject("Shell.Application").Windows
If LCase(W.LocationURL)=LCase(url) Then
Set Prendre_Fenetre_IE=W
Exit For
End If
Next
End Function
'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---

"Jean" a écrit dans le message de news:

Bonjour,

Je cherche comment créer un script VBS ou PowerShell qui active /
désactive le Javascript dans Internet Explorer comme un "interrupteur"
c'est à dire à la demande.

Le but est d'empêcher une application intranet très mal programmée (par
une SSII !) de faire passer intempestivement en avant-plan une fenêtre
"mère" alors que l'on est en pleine saisie d'un formulaire dans une
fenêtre "fille".
A noter qu'un script JS ferme aussi toutes les fenêtres "filles" si on
ferme cette fenêtre "mère" (on doit donc normalement la garder ouverte
en arrière-plan).

En fait, il s'agit peut-être d'agir sur une ou plusieurs clés de la BDR
si toutefois les paramètres de réglage de IE sont bien stockés ici
(??).

Des idées ?

Ted


Sans voir le code il n'est pas évident d'apporter une solution parceque
les situations peuvent être diverses.
Quoiqu'il en soit la manipulation du dom doit pouvoir apporter une
solution.

En essayant d'user des mes pouvoir extra sensoriel je dirais que si la
fenêtre revient à l'avant plan c'est *probablement* une qestion de focus
(qui devrait pouvoir se résoudre en supprimant du code l'appel à la
méthode focus() ou en manipulant les événements OnFocus/OnBlur).

Comme la fenêtre mère parvient à passer à l'avant-plan, le fenêtre fille
doit *probablement* avoir été créée à l'aide de la méthode
showModelessDialog(bla bla).
Dans ce cas, il faudrait déjà essayer en remplacant dans le code
showModelessDialog(bla bla) par showModalDialog(bla bla).

Amicalement,

-- Jean - JMST
Belgium





Amicalement,

--
Jean - JMST
Belgium







Avatar
Jean
Merci Jean pour votre suggestion.
Je vais tester ce VBS demain mais en général le "AppActivate" m'a déjà posé
des problèmes de fonctionnement dans d'autres programmes.



Ca je suis bien d'accord avec vous.
Même moi je n'en voudrais pas :O)

L'exe de Michel sera certainement plus efficace.

Je précise qu'il s'agit bien d'une application intranet développée en ASP sur
laquelle je n'ai aucune action possible !
Donc pas question d'enlever un "OnBlur" ou un "OnFocus".
En plus, chaque page de l'application est truffée de frames et réagit au
moindre clic avec des fct Javascript contenues en partie dans un fichier JS à
part.
C'est une vraie "usine à gaz" (oeuvre d'une SSII très connue) dont je ne
récupère qu'une partie du code dans le dossier "Temporary Internet Files"
d'Internet Explorer 6 sous XP PRO pour essayer d'en comprendre le
(dys)fonctionnement :-|



Ben ... hum ... bonne chance :-)
amha vous perdriez moins de temps à reprendre le "cahier des charges"
et a le refaire , disons, proprement.

Sinon, ici en Belgique on est pas trop pour les acronymes :-) ... donc,
pour ma culture, SSII ça veut dire quoi ?

Ted



"Jean" a écrit dans le message de news:

Voici le code d'une petite partie de la page DHTML (page ASP côté serveur)
dont une zone de saisie (champ date) récupéré dans un fichier temporaire
de IE6. Je l'ai "décortiqué" avec Dreamweaver.

Début de page et du formulaire :

function verifBack(){if(event.keyCode == '8'){alert('La fonction 'Back'
ou 'Précédent' est interdite');event.keyCode = 0;}}document.onkeydown =
toucheenfoncee;
if (document.all) {
document.oncontextmenu=clicker;}
</SCRIPT>
</HEAD>
<BODY TOPMARGIN=0 LEFTMARGIN=0 onKeydown=verifBack();>
<FORM METHOD=POST
ACTION="/binOce/FR/Ticket/Detail/Traitement/TrtTic_Dat.asp?COOKIENAME=ticketOce&NUMFEN=1&TicketSupport="
NAME=FORMTicCau language=javascript OnSubmit='return attends();'>

Le code DHTML du champ à saisir :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onFocus='textfocus=1;' onBlur='textfocus=0;'
onKeyDown='event.cancelBubble=true'>

Dès que l'on commence à écrire dans ce champ 'DATRETTIC1', la fenêtre du
formulaire "saute" 1 fois sur 2, la fenêtre "mère" passe en avant-plan.



J'esseyarais déjà en retirant les événements onfocus et onblur de
DATRETTIC1, soit :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onKeyDown='event.cancelBubble=true' />

Je vois aussi qu'il interdit de presser sur la touche espace arrière (code
touche 8) qui est le raccourci clavier de "précédent" dans l'historique
d'un navigateur.
Ca n'empêche pas l'utilisation de "précédent" dans l'historique via la
souris (mais c'est peut être géré ailleurs dans la script) ou via la touche
"précédent" d'un clavier multimédia (code touche 166).

Mais bon il manque des fonctions, il faudrait voir aussi ce que font
toucheenfoncee() et attends() par ex.
Come vous dites que des problèmes surviennent "Dès que l'on commence à
écrire ..." les événement claviers (onkeydown, onkeyup, ...) sont à prendre
en considération.
Bref sans avoir une vue plus générale du script ...

Je pense réduire la fenêtre mère avec une fonction qui emploierait des API
(FindWindow, SetWindowsPos, etc...) mais en VB ou C++
Sinon, via un simple script VBS ou JS, je ne peux pas agir sur les
fenêtres ?

Qu'en pensez-vous ?

Ted



Franchement je trouve que le mieux serait la correction du code .

Sinon, oui il est *probablement* possible de faire une code VBS ou JS qui
"intercepterait" la fenêtre, en partant de la propriété Windows de l'objet
Shell.Application par exemple un truc dans ce genre ci :

'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---
'~~~~TEST~~~~
Set fenetre=Prendre_Fenetre_IE("file:///K:/fichier.htm")
Afficher_Fenetre fenetre
'~~~~TEST~~~~

Sub Afficher_Fenetre(fen)
If LCase(TypeName(fenetre))="nothing" Then Exit Sub
fen.Document.Focus
With CreateObject("WScript.Shell")
If fen.Document.Title="" Then Exit Sub
While Not .AppActivate(fen.Document.Title)
.AppActivate fen.Document.Title
Wend
End With
End Sub

Function Prendre_Fenetre_IE(url)
Set Prendre_Fenetre_IE=Nothing
For Each W In CreateObject("Shell.Application").Windows
If LCase(W.LocationURL)=LCase(url) Then
Set Prendre_Fenetre_IE=W
Exit For
End If
Next
End Function
'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---

"Jean" a écrit dans le message de news:

Bonjour,

Je cherche comment créer un script VBS ou PowerShell qui active /
désactive le Javascript dans Internet Explorer comme un "interrupteur"
c'est à dire à la demande.

Le but est d'empêcher une application intranet très mal programmée (par
une SSII !) de faire passer intempestivement en avant-plan une fenêtre
"mère" alors que l'on est en pleine saisie d'un formulaire dans une
fenêtre "fille".
A noter qu'un script JS ferme aussi toutes les fenêtres "filles" si on
ferme cette fenêtre "mère" (on doit donc normalement la garder ouverte
en arrière-plan).

En fait, il s'agit peut-être d'agir sur une ou plusieurs clés de la BDR
si toutefois les paramètres de réglage de IE sont bien stockés ici (??).

Des idées ?

Ted


Sans voir le code il n'est pas évident d'apporter une solution parceque
les situations peuvent être diverses.
Quoiqu'il en soit la manipulation du dom doit pouvoir apporter une
solution.

En essayant d'user des mes pouvoir extra sensoriel je dirais que si la
fenêtre revient à l'avant plan c'est *probablement* une qestion de focus
(qui devrait pouvoir se résoudre en supprimant du code l'appel à la
méthode focus() ou en manipulant les événements OnFocus/OnBlur).

Comme la fenêtre mère parvient à passer à l'avant-plan, le fenêtre fille
doit *probablement* avoir été créée à l'aide de la méthode
showModelessDialog(bla bla).
Dans ce cas, il faudrait déjà essayer en remplacant dans le code
showModelessDialog(bla bla) par showModalDialog(bla bla).

Amicalement,

-- Jean - JMST
Belgium





Amicalement,

-- Jean - JMST
Belgium





--
Jean - JMST
Belgium





Avatar
jbongran
Jean wrote:
[...]
Sinon, ici en Belgique on est pas trop pour les acronymes :-) ...
donc, pour ma culture, SSII ça veut dire quoi ?


http://fr.wikipedia.org/wiki/SSII ;-)

Avatar
teddy
SSII = Société de Services en Ingénierie Informatique.
Exemple : CapGemini (anciennement Sogeti), ATOS, Steria, ALTRAN technology,
etc ...

Je confirme que le script VBS proposé avec AppActivate n'arrive pas à me
(re)donner le focus de ma fenêtre "volage" Internet Explorer 6 avec cette
application intranet maudite.

Je crois bien que je vais essayer d'utiliser un petit programme externe en
VB6 ou en C++ utilisant des API telles que FindWindow et SetWindowPos pour
bloquer la fenêtre "fille" incorporant un formulaire à saisir en avant-plan.
Rendez-vous peut-être sur microsoft.public.fr.vb

Merci encore ;-)
Teddy

"Jean" a écrit dans le message de news:

Merci Jean pour votre suggestion.
Je vais tester ce VBS demain mais en général le "AppActivate" m'a déjà
posé des problèmes de fonctionnement dans d'autres programmes.



Ca je suis bien d'accord avec vous.
Même moi je n'en voudrais pas :O)

L'exe de Michel sera certainement plus efficace.

Je précise qu'il s'agit bien d'une application intranet développée en ASP
sur laquelle je n'ai aucune action possible !
Donc pas question d'enlever un "OnBlur" ou un "OnFocus".
En plus, chaque page de l'application est truffée de frames et réagit au
moindre clic avec des fct Javascript contenues en partie dans un fichier
JS à part.
C'est une vraie "usine à gaz" (oeuvre d'une SSII très connue) dont je ne
récupère qu'une partie du code dans le dossier "Temporary Internet Files"
d'Internet Explorer 6 sous XP PRO pour essayer d'en comprendre le
(dys)fonctionnement :-|



Ben ... hum ... bonne chance :-)
amha vous perdriez moins de temps à reprendre le "cahier des charges" et a
le refaire , disons, proprement.

Sinon, ici en Belgique on est pas trop pour les acronymes :-) ... donc,
pour ma culture, SSII ça veut dire quoi ?

Ted



"Jean" a écrit dans le message de news:

Voici le code d'une petite partie de la page DHTML (page ASP côté
serveur) dont une zone de saisie (champ date) récupéré dans un fichier
temporaire de IE6. Je l'ai "décortiqué" avec Dreamweaver.

Début de page et du formulaire :

function verifBack(){if(event.keyCode == '8'){alert('La fonction
'Back' ou 'Précédent' est interdite');event.keyCode =
0;}}document.onkeydown = toucheenfoncee;
if (document.all) {
document.oncontextmenu=clicker;}
</SCRIPT>
</HEAD>
<BODY TOPMARGIN=0 LEFTMARGIN=0 onKeydown=verifBack();>
<FORM METHOD=POST
ACTION="/binOce/FR/Ticket/Detail/Traitement/TrtTic_Dat.asp?COOKIENAME=ticketOce&NUMFEN=1&TicketSupport="
NAME=FORMTicCau language=javascript OnSubmit='return attends();'>

Le code DHTML du champ à saisir :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onFocus='textfocus=1;' onBlur='textfocus=0;'
onKeyDown='event.cancelBubble=true'>

Dès que l'on commence à écrire dans ce champ 'DATRETTIC1', la fenêtre
du formulaire "saute" 1 fois sur 2, la fenêtre "mère" passe en
avant-plan.



J'esseyarais déjà en retirant les événements onfocus et onblur de
DATRETTIC1, soit :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onKeyDown='event.cancelBubble=true' />

Je vois aussi qu'il interdit de presser sur la touche espace arrière
(code touche 8) qui est le raccourci clavier de "précédent" dans
l'historique d'un navigateur.
Ca n'empêche pas l'utilisation de "précédent" dans l'historique via la
souris (mais c'est peut être géré ailleurs dans la script) ou via la
touche "précédent" d'un clavier multimédia (code touche 166).

Mais bon il manque des fonctions, il faudrait voir aussi ce que font
toucheenfoncee() et attends() par ex.
Come vous dites que des problèmes surviennent "Dès que l'on commence à
écrire ..." les événement claviers (onkeydown, onkeyup, ...) sont à
prendre en considération.
Bref sans avoir une vue plus générale du script ...

Je pense réduire la fenêtre mère avec une fonction qui emploierait des
API (FindWindow, SetWindowsPos, etc...) mais en VB ou C++
Sinon, via un simple script VBS ou JS, je ne peux pas agir sur les
fenêtres ?

Qu'en pensez-vous ?

Ted



Franchement je trouve que le mieux serait la correction du code .

Sinon, oui il est *probablement* possible de faire une code VBS ou JS
qui "intercepterait" la fenêtre, en partant de la propriété Windows de
l'objet Shell.Application par exemple un truc dans ce genre ci :

'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---
'~~~~TEST~~~~
Set fenetre=Prendre_Fenetre_IE("file:///K:/fichier.htm")
Afficher_Fenetre fenetre
'~~~~TEST~~~~

Sub Afficher_Fenetre(fen)
If LCase(TypeName(fenetre))="nothing" Then Exit Sub
fen.Document.Focus
With CreateObject("WScript.Shell")
If fen.Document.Title="" Then Exit Sub
While Not .AppActivate(fen.Document.Title)
.AppActivate fen.Document.Title
Wend
End With
End Sub

Function Prendre_Fenetre_IE(url)
Set Prendre_Fenetre_IE=Nothing
For Each W In CreateObject("Shell.Application").Windows
If LCase(W.LocationURL)=LCase(url) Then
Set Prendre_Fenetre_IE=W
Exit For
End If
Next
End Function
'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---

"Jean" a écrit dans le message de news:

Bonjour,

Je cherche comment créer un script VBS ou PowerShell qui active /
désactive le Javascript dans Internet Explorer comme un
"interrupteur" c'est à dire à la demande.

Le but est d'empêcher une application intranet très mal programmée
(par une SSII !) de faire passer intempestivement en avant-plan une
fenêtre "mère" alors que l'on est en pleine saisie d'un formulaire
dans une fenêtre "fille".
A noter qu'un script JS ferme aussi toutes les fenêtres "filles" si
on ferme cette fenêtre "mère" (on doit donc normalement la garder
ouverte en arrière-plan).

En fait, il s'agit peut-être d'agir sur une ou plusieurs clés de la
BDR si toutefois les paramètres de réglage de IE sont bien stockés
ici (??).

Des idées ?

Ted


Sans voir le code il n'est pas évident d'apporter une solution
parceque les situations peuvent être diverses.
Quoiqu'il en soit la manipulation du dom doit pouvoir apporter une
solution.

En essayant d'user des mes pouvoir extra sensoriel je dirais que si la
fenêtre revient à l'avant plan c'est *probablement* une qestion de
focus (qui devrait pouvoir se résoudre en supprimant du code l'appel à
la méthode focus() ou en manipulant les événements OnFocus/OnBlur).

Comme la fenêtre mère parvient à passer à l'avant-plan, le fenêtre
fille doit *probablement* avoir été créée à l'aide de la méthode
showModelessDialog(bla bla).
Dans ce cas, il faudrait déjà essayer en remplacant dans le code
showModelessDialog(bla bla) par showModalDialog(bla bla).

Amicalement,

-- Jean - JMST
Belgium





Amicalement,

-- Jean - JMST
Belgium





--
Jean - JMST
Belgium









Avatar
Jean
Jean wrote:
[...]
Sinon, ici en Belgique on est pas trop pour les acronymes :-) ...
donc, pour ma culture, SSII ça veut dire quoi ?


http://fr.wikipedia.org/wiki/SSII ;-)


Merci ma lanterne est éclairée ... une fois :-)

--
Jean - JMST
Belgium


Avatar
Jean
SSII = Société de Services en Ingénierie Informatique.
Exemple : CapGemini (anciennement Sogeti), ATOS, Steria, ALTRAN technology,
etc ...



Merci ... ma lanterne est éclairée ... deux fois :O)

Je confirme que le script VBS proposé avec AppActivate n'arrive pas à me
(re)donner le focus de ma fenêtre "volage" Internet Explorer 6 avec cette
application intranet maudite.



Il faudrait voir si ce n'est pas la forme de l'url.
Faire un wscript.echo W.LocationURL pour voir ce qu'il faut mettre.
Mais bon c'est gadget.

Sinon il y a un truc que je me dis : comme apparemment la fenêtre est
créée avec un window.open normalement vous devez pouvoir l'activer via
la barre de tâche (ou éventuellement fermer la fenêtre mère si il n'y a
pas d'interraction entre les 2 ... à part ce focus).

Je crois bien que je vais essayer d'utiliser un petit programme externe en
VB6 ou en C++ utilisant des API telles que FindWindow et SetWindowPos pour
bloquer la fenêtre "fille" incorporant un formulaire à saisir en avant-plan.
Rendez-vous peut-être sur microsoft.public.fr.vb



Trop verbeux et trop vieux :-)

Merci encore ;-)
Teddy

"Jean" a écrit dans le message de news:

Merci Jean pour votre suggestion.
Je vais tester ce VBS demain mais en général le "AppActivate" m'a déjà
posé des problèmes de fonctionnement dans d'autres programmes.



Ca je suis bien d'accord avec vous.
Même moi je n'en voudrais pas :O)

L'exe de Michel sera certainement plus efficace.

Je précise qu'il s'agit bien d'une application intranet développée en ASP
sur laquelle je n'ai aucune action possible !
Donc pas question d'enlever un "OnBlur" ou un "OnFocus".
En plus, chaque page de l'application est truffée de frames et réagit au
moindre clic avec des fct Javascript contenues en partie dans un fichier
JS à part.
C'est une vraie "usine à gaz" (oeuvre d'une SSII très connue) dont je ne
récupère qu'une partie du code dans le dossier "Temporary Internet Files"
d'Internet Explorer 6 sous XP PRO pour essayer d'en comprendre le
(dys)fonctionnement :-|



Ben ... hum ... bonne chance :-)
amha vous perdriez moins de temps à reprendre le "cahier des charges" et a
le refaire , disons, proprement.

Sinon, ici en Belgique on est pas trop pour les acronymes :-) ... donc,
pour ma culture, SSII ça veut dire quoi ?

Ted



"Jean" a écrit dans le message de news:

Voici le code d'une petite partie de la page DHTML (page ASP côté
serveur) dont une zone de saisie (champ date) récupéré dans un fichier
temporaire de IE6. Je l'ai "décortiqué" avec Dreamweaver.

Début de page et du formulaire :

function verifBack(){if(event.keyCode == '8'){alert('La fonction
'Back' ou 'Précédent' est interdite');event.keyCode =
0;}}document.onkeydown = toucheenfoncee;
if (document.all) {
document.oncontextmenu=clicker;}
</SCRIPT>
</HEAD>
<BODY TOPMARGIN=0 LEFTMARGIN=0 onKeydown=verifBack();>
<FORM METHOD=POST
ACTION="/binOce/FR/Ticket/Detail/Traitement/TrtTic_Dat.asp?COOKIENAME=ticketOce&NUMFEN=1&TicketSupport="
NAME=FORMTicCau language=javascript OnSubmit='return attends();'>

Le code DHTML du champ à saisir :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onFocus='textfocus=1;' onBlur='textfocus=0;'
onKeyDown='event.cancelBubble=true'>

Dès que l'on commence à écrire dans ce champ 'DATRETTIC1', la fenêtre du
formulaire "saute" 1 fois sur 2, la fenêtre "mère" passe en avant-plan.



J'esseyarais déjà en retirant les événements onfocus et onblur de
DATRETTIC1, soit :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onKeyDown='event.cancelBubble=true' />

Je vois aussi qu'il interdit de presser sur la touche espace arrière
(code touche 8) qui est le raccourci clavier de "précédent" dans
l'historique d'un navigateur.
Ca n'empêche pas l'utilisation de "précédent" dans l'historique via la
souris (mais c'est peut être géré ailleurs dans la script) ou via la
touche "précédent" d'un clavier multimédia (code touche 166).

Mais bon il manque des fonctions, il faudrait voir aussi ce que font
toucheenfoncee() et attends() par ex.
Come vous dites que des problèmes surviennent "Dès que l'on commence à
écrire ..." les événement claviers (onkeydown, onkeyup, ...) sont à
prendre en considération.
Bref sans avoir une vue plus générale du script ...

Je pense réduire la fenêtre mère avec une fonction qui emploierait des
API (FindWindow, SetWindowsPos, etc...) mais en VB ou C++
Sinon, via un simple script VBS ou JS, je ne peux pas agir sur les
fenêtres ?

Qu'en pensez-vous ?

Ted



Franchement je trouve que le mieux serait la correction du code .

Sinon, oui il est *probablement* possible de faire une code VBS ou JS qui
"intercepterait" la fenêtre, en partant de la propriété Windows de
l'objet Shell.Application par exemple un truc dans ce genre ci :

'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---
'~~~~TEST~~~~
Set fenetre=Prendre_Fenetre_IE("file:///K:/fichier.htm")
Afficher_Fenetre fenetre
'~~~~TEST~~~~

Sub Afficher_Fenetre(fen)
If LCase(TypeName(fenetre))="nothing" Then Exit Sub
fen.Document.Focus
With CreateObject("WScript.Shell")
If fen.Document.Title="" Then Exit Sub
While Not .AppActivate(fen.Document.Title)
.AppActivate fen.Document.Title
Wend
End With
End Sub

Function Prendre_Fenetre_IE(url)
Set Prendre_Fenetre_IE=Nothing
For Each W In CreateObject("Shell.Application").Windows
If LCase(W.LocationURL)=LCase(url) Then
Set Prendre_Fenetre_IE=W
Exit For
End If
Next
End Function
'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---

"Jean" a écrit dans le message de news:

Bonjour,

Je cherche comment créer un script VBS ou PowerShell qui active /
désactive le Javascript dans Internet Explorer comme un "interrupteur"
c'est à dire à la demande.

Le but est d'empêcher une application intranet très mal programmée
(par une SSII !) de faire passer intempestivement en avant-plan une
fenêtre "mère" alors que l'on est en pleine saisie d'un formulaire
dans une fenêtre "fille".
A noter qu'un script JS ferme aussi toutes les fenêtres "filles" si on
ferme cette fenêtre "mère" (on doit donc normalement la garder ouverte
en arrière-plan).

En fait, il s'agit peut-être d'agir sur une ou plusieurs clés de la
BDR si toutefois les paramètres de réglage de IE sont bien stockés ici
(??).

Des idées ?

Ted


Sans voir le code il n'est pas évident d'apporter une solution parceque
les situations peuvent être diverses.
Quoiqu'il en soit la manipulation du dom doit pouvoir apporter une
solution.

En essayant d'user des mes pouvoir extra sensoriel je dirais que si la
fenêtre revient à l'avant plan c'est *probablement* une qestion de
focus (qui devrait pouvoir se résoudre en supprimant du code l'appel à
la méthode focus() ou en manipulant les événements OnFocus/OnBlur).

Comme la fenêtre mère parvient à passer à l'avant-plan, le fenêtre
fille doit *probablement* avoir été créée à l'aide de la méthode
showModelessDialog(bla bla).
Dans ce cas, il faudrait déjà essayer en remplacant dans le code
showModelessDialog(bla bla) par showModalDialog(bla bla).

Amicalement,

-- Jean - JMST
Belgium





Amicalement,

-- Jean - JMST
Belgium





-- Jean - JMST
Belgium





--
Jean - JMST
Belgium







Avatar
teddy
Ma fenêtre à maintenir en avant-plan est dépendante de la fenêtre mère.
Si on ferme la fenêtre mère, une fonction JS ferme toutes les "filles" ce
qui - par contre - est un fonctionnement tout à fait normal.

Ted


"Jean" a écrit dans le message de news:

SSII = Société de Services en Ingénierie Informatique.
Exemple : CapGemini (anciennement Sogeti), ATOS, Steria, ALTRAN
technology, etc ...



Merci ... ma lanterne est éclairée ... deux fois :O)

Je confirme que le script VBS proposé avec AppActivate n'arrive pas à me
(re)donner le focus de ma fenêtre "volage" Internet Explorer 6 avec cette
application intranet maudite.



Il faudrait voir si ce n'est pas la forme de l'url.
Faire un wscript.echo W.LocationURL pour voir ce qu'il faut mettre.
Mais bon c'est gadget.

Sinon il y a un truc que je me dis : comme apparemment la fenêtre est
créée avec un window.open normalement vous devez pouvoir l'activer via la
barre de tâche (ou éventuellement fermer la fenêtre mère si il n'y a pas
d'interraction entre les 2 ... à part ce focus).

Je crois bien que je vais essayer d'utiliser un petit programme externe
en VB6 ou en C++ utilisant des API telles que FindWindow et SetWindowPos
pour bloquer la fenêtre "fille" incorporant un formulaire à saisir en
avant-plan.
Rendez-vous peut-être sur microsoft.public.fr.vb



Trop verbeux et trop vieux :-)

Merci encore ;-)
Teddy

"Jean" a écrit dans le message de news:

Merci Jean pour votre suggestion.
Je vais tester ce VBS demain mais en général le "AppActivate" m'a déjà
posé des problèmes de fonctionnement dans d'autres programmes.



Ca je suis bien d'accord avec vous.
Même moi je n'en voudrais pas :O)

L'exe de Michel sera certainement plus efficace.

Je précise qu'il s'agit bien d'une application intranet développée en
ASP sur laquelle je n'ai aucune action possible !
Donc pas question d'enlever un "OnBlur" ou un "OnFocus".
En plus, chaque page de l'application est truffée de frames et réagit
au moindre clic avec des fct Javascript contenues en partie dans un
fichier JS à part.
C'est une vraie "usine à gaz" (oeuvre d'une SSII très connue) dont je
ne récupère qu'une partie du code dans le dossier "Temporary Internet
Files" d'Internet Explorer 6 sous XP PRO pour essayer d'en comprendre
le (dys)fonctionnement :-|



Ben ... hum ... bonne chance :-)
amha vous perdriez moins de temps à reprendre le "cahier des charges" et
a le refaire , disons, proprement.

Sinon, ici en Belgique on est pas trop pour les acronymes :-) ... donc,
pour ma culture, SSII ça veut dire quoi ?

Ted



"Jean" a écrit dans le message de news:

Voici le code d'une petite partie de la page DHTML (page ASP côté
serveur) dont une zone de saisie (champ date) récupéré dans un
fichier temporaire de IE6. Je l'ai "décortiqué" avec Dreamweaver.

Début de page et du formulaire :

function verifBack(){if(event.keyCode == '8'){alert('La fonction
'Back' ou 'Précédent' est interdite');event.keyCode =
0;}}document.onkeydown = toucheenfoncee;
if (document.all) {
document.oncontextmenu=clicker;}
</SCRIPT>
</HEAD>
<BODY TOPMARGIN=0 LEFTMARGIN=0 onKeydown=verifBack();>
<FORM METHOD=POST
ACTION="/binOce/FR/Ticket/Detail/Traitement/TrtTic_Dat.asp?COOKIENAME=ticketOce&NUMFEN=1&TicketSupport="
NAME=FORMTicCau language=javascript OnSubmit='return attends();'>

Le code DHTML du champ à saisir :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onFocus='textfocus=1;' onBlur='textfocus=0;'
onKeyDown='event.cancelBubble=true'>

Dès que l'on commence à écrire dans ce champ 'DATRETTIC1', la fenêtre
du formulaire "saute" 1 fois sur 2, la fenêtre "mère" passe en
avant-plan.



J'esseyarais déjà en retirant les événements onfocus et onblur de
DATRETTIC1, soit :

<input name='DATRETTIC1' type=TEXT maxlength value='' size=9
onKeyDown='event.cancelBubble=true' />

Je vois aussi qu'il interdit de presser sur la touche espace arrière
(code touche 8) qui est le raccourci clavier de "précédent" dans
l'historique d'un navigateur.
Ca n'empêche pas l'utilisation de "précédent" dans l'historique via la
souris (mais c'est peut être géré ailleurs dans la script) ou via la
touche "précédent" d'un clavier multimédia (code touche 166).

Mais bon il manque des fonctions, il faudrait voir aussi ce que font
toucheenfoncee() et attends() par ex.
Come vous dites que des problèmes surviennent "Dès que l'on commence à
écrire ..." les événement claviers (onkeydown, onkeyup, ...) sont à
prendre en considération.
Bref sans avoir une vue plus générale du script ...

Je pense réduire la fenêtre mère avec une fonction qui emploierait
des API (FindWindow, SetWindowsPos, etc...) mais en VB ou C++
Sinon, via un simple script VBS ou JS, je ne peux pas agir sur les
fenêtres ?

Qu'en pensez-vous ?

Ted



Franchement je trouve que le mieux serait la correction du code .

Sinon, oui il est *probablement* possible de faire une code VBS ou JS
qui "intercepterait" la fenêtre, en partant de la propriété Windows de
l'objet Shell.Application par exemple un truc dans ce genre ci :

'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---
'~~~~TEST~~~~
Set fenetre=Prendre_Fenetre_IE("file:///K:/fichier.htm")
Afficher_Fenetre fenetre
'~~~~TEST~~~~

Sub Afficher_Fenetre(fen)
If LCase(TypeName(fenetre))="nothing" Then Exit Sub
fen.Document.Focus
With CreateObject("WScript.Shell")
If fen.Document.Title="" Then Exit Sub
While Not .AppActivate(fen.Document.Title)
.AppActivate fen.Document.Title
Wend
End With
End Sub

Function Prendre_Fenetre_IE(url)
Set Prendre_Fenetre_IE=Nothing
For Each W In CreateObject("Shell.Application").Windows
If LCase(W.LocationURL)=LCase(url) Then
Set Prendre_Fenetre_IE=W
Exit For
End If
Next
End Function
'---8<---Prendre_Et_Afficher_Fenetre_IE.VBS---Jean-JMST-Belgium---

"Jean" a écrit dans le message de news:

Bonjour,

Je cherche comment créer un script VBS ou PowerShell qui active /
désactive le Javascript dans Internet Explorer comme un
"interrupteur" c'est à dire à la demande.

Le but est d'empêcher une application intranet très mal programmée
(par une SSII !) de faire passer intempestivement en avant-plan une
fenêtre "mère" alors que l'on est en pleine saisie d'un formulaire
dans une fenêtre "fille".
A noter qu'un script JS ferme aussi toutes les fenêtres "filles" si
on ferme cette fenêtre "mère" (on doit donc normalement la garder
ouverte en arrière-plan).

En fait, il s'agit peut-être d'agir sur une ou plusieurs clés de la
BDR si toutefois les paramètres de réglage de IE sont bien stockés
ici (??).

Des idées ?

Ted


Sans voir le code il n'est pas évident d'apporter une solution
parceque les situations peuvent être diverses.
Quoiqu'il en soit la manipulation du dom doit pouvoir apporter une
solution.

En essayant d'user des mes pouvoir extra sensoriel je dirais que si
la fenêtre revient à l'avant plan c'est *probablement* une qestion
de focus (qui devrait pouvoir se résoudre en supprimant du code
l'appel à la méthode focus() ou en manipulant les événements
OnFocus/OnBlur).

Comme la fenêtre mère parvient à passer à l'avant-plan, le fenêtre
fille doit *probablement* avoir été créée à l'aide de la méthode
showModelessDialog(bla bla).
Dans ce cas, il faudrait déjà essayer en remplacant dans le code
showModelessDialog(bla bla) par showModalDialog(bla bla).

Amicalement,

-- Jean - JMST
Belgium





Amicalement,

-- Jean - JMST
Belgium





-- Jean - JMST
Belgium





--
Jean - JMST
Belgium











1 2