OVH Cloud OVH Cloud

IE instancié, et piloté par vbs

10 réponses
Avatar
sympatix
Bonjour, et Meilleurs Voeux à tout le monde pour l'année 2005

J'ai un problème pour récupérer l'évènement d'appui sur un bouton dans une
instance d'IE, créee par Vbs. J'arrive bien a créer graphiquement le bouton
dans l'instance, mais ça s'arrête là...Je me suis vaguement inspiré d'un
code de JCB, mais mon cas est légèrement différent, puisque, contrairement à
lui, je ne m'appuie pas sur un formulaire html existant, mais, je le crée de
toute pièce par le biais de l'instance d'IE.

Tout ce que je voudrais, c'est dans le cas présent, récupérer l'évènement
d'appui sur le bouton, sans pour autant utiliser un fichier html tiers.

Merci d'avance pour toute aide :-)
Voici ci-dessous le code (qui ne marche pas !)
Cordialement, Sympatix

---------------Début-----------------
Set A = CreateObject ("InternetExplorer.Application")
With A
.Navigate "about:blank"
Do While .Busy : Wscript.Sleep 200
Loop
.Visible = 1
End With

A.Document.Body.InnerHTML = "<INPUT TYPE=""BUTTON"" NAME=""B""" _
& "VALUE = ""Bouton""><Script language = ""VbScript"">" _
& ": Sub B_ON_CLICK : Retour = 1 : End Sub : Public Function Val ()" _
& ": Val = Retour : End function : </SCRIPT>"

Test = A.Document.Body.Script.Val ()
If Test = 1 Then
MsgBox "Appuie sur bouton"
End If
-----------------Fin--------------------

10 réponses

Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonjour !

Une idée : tu pourrais affecter un objet "hors écran" (par exemple avec left
= -10000), et tester, de l'extérieur, le contenu de cet objet. Dès qu'il
change, c'est que l'on a cliqué sur le bouton.

Autre possibilité : modifier, à la volée, le titre de la fenêtre IE (avec
document.title), et utiliser l'évènement "TitleChange" comme déclencheur.
Mais cela nécessite de piloter IE comme un active-X.

Perso, pour un besoin similaire, je passe par un objet tiers, à savoir un
serveur COM. Le clic sur un bouton envoie un paramètre au serveur COM, qui
réagit en conséquence (l'envoi se fait via une petite fonction javascript).

@-salutations
--
Michel Claveau
Avatar
sympatix
Une idée : tu pourrais affecter un objet "hors écran" (par exemple avec
left

= -10000), et tester, de l'extérieur, le contenu de cet objet. Dès qu'il
change, c'est que l'on a cliqué sur le bouton.


Je vais essayer ça...mais aurais-tu un petit exemple sous la main, car, je
ne vois pas du tout comment mettre ça en pratique
(sans vouloir abuser !)

Merci :-)
Cordialement
Sympatix

Avatar
Jean
Bonjour,

Autre possibilité : modifier, à la volée, le titre de la fenêtre IE (avec
document.title), et utiliser l'évènement "TitleChange" comme déclencheur.
Mais cela nécessite de piloter IE comme un active-X.


On peut accéder à cet événement (et aux autres) en utilisant la méthode CreateObject *de
WScript* en y spécifiant le paramètre strPrefix :
http://msdn.microsoft.com/library/en-us/script56/html/wsMthCreateObject.asp

"Objects created with the CreateObject method using the strPrefix argument are connected objects. These are useful when you want to
sync an object's events."

Il ne faut pas oublier de pauser le script après la création de l'objet sinon l' instance du script ne sera plus disponible (après
exécution de son code) et les
événements
ne seront forcément plus gérés (l'objet étant alors déconnecté).

Exemple (code ci dessous) : http://automation.eu.tf/Evenements_IE_2.VBS

'---8<---Evenements_IE_2.VBS---Jean-JMST-Belgium---
Dim IE
i=0
quitterúlse
cliquerúlse

With WScript.CreateObject("InternetExplorer.Application","IEAPP_")
.Navigate("about:blank")
.Visible=True
End With

While Not quitter
If cliquer Then
cliquerúlse
End If
WScript.Sleep 100
Wend

MsgBox "Fin du script"
Minimiser(False)

Sub Clic_Test
i=i+1
IE.Document.Title="Titre "&i
cliquer=True
End Sub

Sub IEAPP_DocumentComplete(a,b)
Set IE=a
With a.Document
.Body.innerHTML=_
"<input type='button' id='B1' value='Changer titre'>"
.All.B1.OnClick=GetRef("Clic_Test")
End With
Avant_Plan(b)
End Sub

Sub IEAPP_TitleChange(a)
Minimiser(True)
MsgBox "Le titre est : "&a
Minimiser(False)
End Sub

Sub IEAPP_OnQuit
Set IE=Nothing
quitter=true
End Sub

'Sous routines utilitaires
Sub Avant_Plan(quoi)
While Not CreateObject("WScript.Shell")_
.AppActivate(quoi)
WScript.Sleep 100
Wend
End Sub

Sub Minimiser(mode)
On Error Resume Next
With CreateObject("Shell.Application")
If mode Then
.MinimizeAll
Else
.UndoMinimizeAll
End If
End With
On Error GoTo 0
End Sub
'---8<---Evenements_IE_2.VBS---Jean-JMST-Belgium---



Amicalement,

Jean - JMST
Belgium

"Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle."
a écrit dans le message de news: %
Bonjour !

Une idée : tu pourrais affecter un objet "hors écran" (par exemple avec left
= -10000), et tester, de l'extérieur, le contenu de cet objet. Dès qu'il
change, c'est que l'on a cliqué sur le bouton.

Autre possibilité : modifier, à la volée, le titre de la fenêtre IE (avec
document.title), et utiliser l'évènement "TitleChange" comme déclencheur.
Mais cela nécessite de piloter IE comme un active-X.

Perso, pour un besoin similaire, je passe par un objet tiers, à savoir un
serveur COM. Le clic sur un bouton envoie un paramètre au serveur COM, qui
réagit en conséquence (l'envoi se fait via une petite fonction javascript).

@-salutations
--
Michel Claveau






Avatar
Jean
Bonjour,

Un truc comme ceci si j'ai bien compris (cf ma réponse à Michel Claveau pour infos) :

(code ci dessous) http://automation.eu.tf/Evenements_IE_1.VBS

Mais bon ... encore une fois ... une fois :-) ... l'utilisation d'un HTA sera plus confortable.
L'utilisation de l'objet InternetExplorer.Application se justifiait surtout lorsque les HTA n'existaient pas.

Dans le script ci dessous, la variable cliquer "valide" le clic sur le bouton.
La routine Clic_Test est assignée à l'événement onclick du bouton.
La variable quitter sert d'indicateur de fermeture de l'instance IE.
La ligne IE.Quit est là pour illustrer la gestion de l'événement OnQuit (elle est "facultative").
L'utilisation des routines Avant_Plan et Minimiser est là pour améliorer la "lisibilité" du script à l'affichage ... mais je n'ai
pas fignolé :-) ... prenez attention au fait qu'une boîte de dialogue ou instance IE peut être minimisée ... gardez un oeil sur la
barre de tâches ;-)

'---8<---Evenements_IE_1.VBS---Jean-JMST-Belgium---
Dim IE
quitterúlse
cliquerúlse

With WScript.CreateObject("InternetExplorer.Application","IEAPP_")
.Navigate("about:blank")
.Visible=True
End With

While Not quitter
If cliquer Then
cliquerúlse
Minimiser(True)
MsgBox "Vous avez cliqué sur le bouton."
IE.Quit
End If
WScript.Sleep 100
Wend

MsgBox "Fin du script"
Minimiser(False)

Sub Clic_Test
cliquer=True
End Sub

Sub IEAPP_DocumentComplete(a,b)
Set IE=a
With a.Document
.Body.innerHTML=_
"<input type='button' id='B1' value='Bouton'>"
.All.B1.OnClick=GetRef("Clic_Test")
End With
Avant_Plan(b)
End Sub

Sub IEAPP_OnQuit
MsgBox "La fenêtre IE se ferme."
Set IE=Nothing
quitter=true
End Sub

'Sous routines utilitaires
Sub Avant_Plan(quoi)
While Not CreateObject("WScript.Shell")_
.AppActivate(quoi)
WScript.Sleep 100
Wend
End Sub

Sub Minimiser(mode)
On Error Resume Next
With CreateObject("Shell.Application")
If mode Then
.MinimizeAll
Else
.UndoMinimizeAll
End If
End With
On Error GoTo 0
End Sub
'---8<---Evenements_IE_1.VBS---Jean-JMST-Belgium---

Amicalement,

Jean - JMST
Belgium

"sympatix" a écrit dans le message de news: %
Bonjour, et Meilleurs Voeux à tout le monde pour l'année 2005

J'ai un problème pour récupérer l'évènement d'appui sur un bouton dans une
instance d'IE, créee par Vbs. J'arrive bien a créer graphiquement le bouton
dans l'instance, mais ça s'arrête là...Je me suis vaguement inspiré d'un
code de JCB, mais mon cas est légèrement différent, puisque, contrairement à
lui, je ne m'appuie pas sur un formulaire html existant, mais, je le crée de
toute pièce par le biais de l'instance d'IE.

Tout ce que je voudrais, c'est dans le cas présent, récupérer l'évènement
d'appui sur le bouton, sans pour autant utiliser un fichier html tiers.

Merci d'avance pour toute aide :-)
Voici ci-dessous le code (qui ne marche pas !)
Cordialement, Sympatix

---------------Début-----------------
Set A = CreateObject ("InternetExplorer.Application")
With A
.Navigate "about:blank"
Do While .Busy : Wscript.Sleep 200
Loop
.Visible = 1
End With

A.Document.Body.InnerHTML = "<INPUT TYPE=""BUTTON"" NAME=""B""" _
& "VALUE = ""Bouton""><Script language = ""VbScript"">" _
& ": Sub B_ON_CLICK : Retour = 1 : End Sub : Public Function Val ()" _
& ": Val = Retour : End function : </SCRIPT>"

Test = A.Document.Body.Script.Val ()
If Test = 1 Then
MsgBox "Appuie sur bouton"
End If
-----------------Fin--------------------


















Avatar
sympatix
Mais bon ... encore une fois ... une fois :-) ... l'utilisation d'un HTA
sera plus confortable.

L'utilisation de l'objet InternetExplorer.Application se justifiait
surtout lorsque les HTA n'existaient pas.


C'est que j'ai encore du mal avec le DHTML (je suis souvent bloqué par mon
manque de connaissance dans la syntaxe, je me mélange souvent les pinceaux
en confondant les feuilles de styles avec le style appliqué à l'intérieur
d'une balise, car la syntaxe n'est justement pas la même)...bref, j'en
profite pour vous demander si vous auriez sous la main quelques bonnes
adresses pour essayer d'y voir un peu plus clair en HTML ?

Dans le script ci dessous, la variable cliquer "valide" le clic sur le
bouton.

La routine Clic_Test est assignée à l'événement onclick du bouton.
La variable quitter sert d'indicateur de fermeture de l'instance IE.
La ligne IE.Quit est là pour illustrer la gestion de l'événement OnQuit
(elle est "facultative").

L'utilisation des routines Avant_Plan et Minimiser est là pour améliorer
la "lisibilité" du script à l'affichage ... mais je n'ai


ça a l'aird'être exactement ce qu'il me faut :-)

pas fignolé :-) ... prenez attention au fait qu'une boîte de dialogue ou
instance IE peut être minimisée ... gardez un oeil sur la

barre de tâches ;-)
Oui, je me suis déjà fais avoir par ça !


Merci :-)
Cordialement
Sympatix

Avatar
scraper
Bonjour Michel Claveau - abstraction méta-galactique non triviale en fuite
perpétuelle.
(dans news:%)
tu nous disais :

Bonjour !

Une idée : tu pourrais affecter un objet "hors écran" (par exemple
avec left = -10000), et tester, de l'extérieur, le contenu de cet
objet. Dès qu'il change, c'est que l'on a cliqué sur le bouton.


humm ... n'est ce pas bloqué par XP SP2, comme toute f enêtre en dehors du
champ ??


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

Avatar
Michel Claveau
Bonjour !



Tu mets, dans ton HTML, qq. chose comme :

<SPAN id='FLAG' style='POSITION: absolute; top:0; left:-999;'>
None
</SPAN>



Ensuite, dans ton bouton (button), tu mets un truc ressemblant à :

onClick='Fclic();'

(sans oublier d'identifier le bouton avec id="xxx"



Et tu complètes par un machin du genre :

<script language=JavaScript>
function Fclic(){
var vobj = document.getElementById('FLAG');
vobj.innerText = event.srcElement.id;
alert("Bonne année 2005);}
</script>




Normalement, dès que l'utl clique sur le bouton, l'innerText de FLAG change,
pour contenir l'id du bouton.
Ne pas oublier de l'effacer, après l'avoir lu.
Avatar
Michel Claveau
Bonjour !

Je pensais à un objet hors écran, mais pas hors fenêtre. Voir ma réponse à
Sympatix.

De plus, le SP2 ne bloque pas tout (heureusement) ; et c'est débrayable par
site.

@-salutations
--
Michel Claveau
Avatar
sympatix
Merci de t'être donné la peine de me détailler les étapes...
Entre temps, j'ai utilisé la méthode de Jean...
Mais je garde bien au frais ta méthode qui me servira certainement une fois
(ça y est, je parle aussi le Belge ;-)

Et... Bonne Année encore !

Cordialement
Sympatix

"Michel Claveau" a écrit dans le message de
news:

Bonjour !



Tu mets, dans ton HTML, qq. chose comme :

<SPAN id='FLAG' style='POSITION: absolute; top:0; left:-999;'>
None
</SPAN>



Ensuite, dans ton bouton (button), tu mets un truc ressemblant à :

onClick='Fclic();'

(sans oublier d'identifier le bouton avec id="xxx"



Et tu complètes par un machin du genre :

<script language=JavaScript>
function Fclic(){
var vobj = document.getElementById('FLAG');
vobj.innerText = event.srcElement.id;
alert("Bonne année 2005);}
</script>




Normalement, dès que l'utl clique sur le bouton, l'innerText de FLAG
change,

pour contenir l'id du bouton.
Ne pas oublier de l'effacer, après l'avoir lu.





Avatar
scraper
Bonjour Michel Claveau
(dans news:%)
tu nous disais :

Bonjour !

Je pensais à un objet hors écran, mais pas hors fenêtre. Voir ma
réponse à Sympatix.


vi, j'ai vu !

mais justement, il me semble bien (??) que le SP 2 bloque ça ?

De plus, le SP2 ne bloque pas tout (heureusement) ; et c'est
débrayable par site.


je ne sais pas, c'était juste une remarque, pour s'assurer de la portabilité
éventuelle du code ...




--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper