Aucun problème pour accéder par DHTML à un document web par ouverture,
par exemple
Set IE = New InternetExplorer
IE.Navigate "http://www.google.fr"
(en ayant bien sûr pris soin de sélectionner shdocvw.dll dans les
références)
Mais si maintenant j'ai une fenêtre Internet Explorer déjà ouverte, et
que je veux aller lire dedans ?
Set O = GetObject("http://www.google.fr", "InternetExplorer.Application")
Erreur 432, nom de fichier ou de classe non trouvé pendant l'opération.
Set O = GetObject("http://www.google.fr", "")
Erreur 429, le composant ActiveX ne peut créer l'objet
Set O = GetObject("http://www.google.fr", vbNullString)
Erreur 5, appel ou argument de procédure incorrect
Je réussis à ouvrir un objet sur Internet Explorer en ne précisant pas
d'URL, mais cet objet ne gère pas les collections windows et documents.
Alors, faut-il fermer la fenêtre et rouvrir un navigateur sur la même
adresse ?
J'ai un navigateur de dialogue Yahoo qui ouvre des fenêtres Internet
Explorer, lesquelles semblent prendre un malin plaisir à aller se cacher
derrière. Alors, je les positionne correctement à gauche de la fenêtre
Yahoo, grâce au hWnd et aux API, ça d'accord, mais alors ensuite les
fenêtres ouvertes comportent des tableaux dont seule la deuxième colonne
m'intéresse, et encore pas le haut. Alors j'aimerais bien faire défiler
la fenêtre au bon endroit. Les propriétés DHTML me paraissent adaptées
pour aller plus loin, mais j'ai tendance à trouver "ballot" de devoir
ouvrir un deuxième exemplaire de chaque nouvelle fenêtre ouverte.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Alain CROS
Bonjour,
Peut être une piste.
Sub TrouveFenetreExplorer() 'Ajouter une référence à Microsoft Internet Controls Dim SW As ShellWindows Dim IE As Object Set SW = New ShellWindows For Each IE In SW If TypeName(IE.Document) = "HTMLDocument" Then MsgBox IE.Document.URL End If Next IE Set IE = Nothing Set SW = Nothing End Sub
Alain CROS
"Gloops" a écrit dans le message de news: 43fa3b89$0$18348$ | Bonjour tout le monde, | | Aucun problème pour accéder par DHTML à un document web par ouverture, | par exemple | | Set IE = New InternetExplorer | IE.Navigate "http://www.google.fr" | | (en ayant bien sûr pris soin de sélectionner shdocvw.dll dans les | références) | | Mais si maintenant j'ai une fenêtre Internet Explorer déjà ouverte, et | que je veux aller lire dedans ? | | Set O = GetObject("http://www.google.fr", "InternetExplorer.Application") | Erreur 432, nom de fichier ou de classe non trouvé pendant l'opération. | | Set O = GetObject("http://www.google.fr", "") | Erreur 429, le composant ActiveX ne peut créer l'objet | | Set O = GetObject("http://www.google.fr", vbNullString) | Erreur 5, appel ou argument de procédure incorrect | | Je réussis à ouvrir un objet sur Internet Explorer en ne précisant pas | d'URL, mais cet objet ne gère pas les collections windows et documents. | | Alors, faut-il fermer la fenêtre et rouvrir un navigateur sur la même | adresse ? | | J'ai un navigateur de dialogue Yahoo qui ouvre des fenêtres Internet | Explorer, lesquelles semblent prendre un malin plaisir à aller se cacher | derrière. Alors, je les positionne correctement à gauche de la fenêtre | Yahoo, grâce au hWnd et aux API, ça d'accord, mais alors ensuite les | fenêtres ouvertes comportent des tableaux dont seule la deuxième colonne | m'intéresse, et encore pas le haut. Alors j'aimerais bien faire défiler | la fenêtre au bon endroit. Les propriétés DHTML me paraissent adaptées | pour aller plus loin, mais j'ai tendance à trouver "ballot" de devoir | ouvrir un deuxième exemplaire de chaque nouvelle fenêtre ouverte. |
Bonjour,
Peut être une piste.
Sub TrouveFenetreExplorer()
'Ajouter une référence à Microsoft Internet Controls
Dim SW As ShellWindows
Dim IE As Object
Set SW = New ShellWindows
For Each IE In SW
If TypeName(IE.Document) = "HTMLDocument" Then
MsgBox IE.Document.URL
End If
Next IE
Set IE = Nothing
Set SW = Nothing
End Sub
Alain CROS
"Gloops" <gloops@niark.invalid> a écrit dans le message de news: 43fa3b89$0$18348$8fcfb975@news.wanadoo.fr...
| Bonjour tout le monde,
|
| Aucun problème pour accéder par DHTML à un document web par ouverture,
| par exemple
|
| Set IE = New InternetExplorer
| IE.Navigate "http://www.google.fr"
|
| (en ayant bien sûr pris soin de sélectionner shdocvw.dll dans les
| références)
|
| Mais si maintenant j'ai une fenêtre Internet Explorer déjà ouverte, et
| que je veux aller lire dedans ?
|
| Set O = GetObject("http://www.google.fr", "InternetExplorer.Application")
| Erreur 432, nom de fichier ou de classe non trouvé pendant l'opération.
|
| Set O = GetObject("http://www.google.fr", "")
| Erreur 429, le composant ActiveX ne peut créer l'objet
|
| Set O = GetObject("http://www.google.fr", vbNullString)
| Erreur 5, appel ou argument de procédure incorrect
|
| Je réussis à ouvrir un objet sur Internet Explorer en ne précisant pas
| d'URL, mais cet objet ne gère pas les collections windows et documents.
|
| Alors, faut-il fermer la fenêtre et rouvrir un navigateur sur la même
| adresse ?
|
| J'ai un navigateur de dialogue Yahoo qui ouvre des fenêtres Internet
| Explorer, lesquelles semblent prendre un malin plaisir à aller se cacher
| derrière. Alors, je les positionne correctement à gauche de la fenêtre
| Yahoo, grâce au hWnd et aux API, ça d'accord, mais alors ensuite les
| fenêtres ouvertes comportent des tableaux dont seule la deuxième colonne
| m'intéresse, et encore pas le haut. Alors j'aimerais bien faire défiler
| la fenêtre au bon endroit. Les propriétés DHTML me paraissent adaptées
| pour aller plus loin, mais j'ai tendance à trouver "ballot" de devoir
| ouvrir un deuxième exemplaire de chaque nouvelle fenêtre ouverte.
|
Sub TrouveFenetreExplorer() 'Ajouter une référence à Microsoft Internet Controls Dim SW As ShellWindows Dim IE As Object Set SW = New ShellWindows For Each IE In SW If TypeName(IE.Document) = "HTMLDocument" Then MsgBox IE.Document.URL End If Next IE Set IE = Nothing Set SW = Nothing End Sub
Alain CROS
"Gloops" a écrit dans le message de news: 43fa3b89$0$18348$ | Bonjour tout le monde, | | Aucun problème pour accéder par DHTML à un document web par ouverture, | par exemple | | Set IE = New InternetExplorer | IE.Navigate "http://www.google.fr" | | (en ayant bien sûr pris soin de sélectionner shdocvw.dll dans les | références) | | Mais si maintenant j'ai une fenêtre Internet Explorer déjà ouverte, et | que je veux aller lire dedans ? | | Set O = GetObject("http://www.google.fr", "InternetExplorer.Application") | Erreur 432, nom de fichier ou de classe non trouvé pendant l'opération. | | Set O = GetObject("http://www.google.fr", "") | Erreur 429, le composant ActiveX ne peut créer l'objet | | Set O = GetObject("http://www.google.fr", vbNullString) | Erreur 5, appel ou argument de procédure incorrect | | Je réussis à ouvrir un objet sur Internet Explorer en ne précisant pas | d'URL, mais cet objet ne gère pas les collections windows et documents. | | Alors, faut-il fermer la fenêtre et rouvrir un navigateur sur la même | adresse ? | | J'ai un navigateur de dialogue Yahoo qui ouvre des fenêtres Internet | Explorer, lesquelles semblent prendre un malin plaisir à aller se cacher | derrière. Alors, je les positionne correctement à gauche de la fenêtre | Yahoo, grâce au hWnd et aux API, ça d'accord, mais alors ensuite les | fenêtres ouvertes comportent des tableaux dont seule la deuxième colonne | m'intéresse, et encore pas le haut. Alors j'aimerais bien faire défiler | la fenêtre au bon endroit. Les propriétés DHTML me paraissent adaptées | pour aller plus loin, mais j'ai tendance à trouver "ballot" de devoir | ouvrir un deuxième exemplaire de chaque nouvelle fenêtre ouverte. |
Gloops
Ah, mais c'est que ça a l'air de marcher, ce truc. Merci.
*
M'étonnerait que je sois le dernier à vouloir faire un truc de cet acabit. Qu'est-ce qu'on mettrait bien comme mots-clefs pour retrouver ça ? "Internet Explorer", fenêtre, objet ? Lier fenêtre à objet Internet Explorer ?
Il en manque, je crois. Appel aux foules : si vous aviez eu ce problème à résoudre, vous auriez cherché quoi ?
Rappel du problème : on a une fenêtre, on veut accéder à l'objet Internet Explorer qui lui est lié, pour utiliser la technique DHTML.
Réponse : pour chaque valeur de IE dans le code d'Alain, on va pouvoir comparer IE.document.Title à la valeur retournée par GetWindowText sur l'hWnd de la fenêtre.
Avec quels mots-clefs va-t-on vouloir trouver ça ? _________________________________________ Alain CROS a écrit, le 21/02/2006 16:18 :
Bonjour,
Peut être une piste.
Sub TrouveFenetreExplorer() 'Ajouter une référence à Microsoft Internet Controls Dim SW As ShellWindows Dim IE As Object Set SW = New ShellWindows For Each IE In SW If TypeName(IE.Document) = "HTMLDocument" Then MsgBox IE.Document.URL End If Next IE Set IE = Nothing Set SW = Nothing End Sub
Alain CROS
Ah, mais c'est que ça a l'air de marcher, ce truc.
Merci.
*
M'étonnerait que je sois le dernier à vouloir faire un truc de cet
acabit. Qu'est-ce qu'on mettrait bien comme mots-clefs pour retrouver ça ?
"Internet Explorer", fenêtre, objet ? Lier fenêtre à objet Internet
Explorer ?
Il en manque, je crois. Appel aux foules : si vous aviez eu ce problème
à résoudre, vous auriez cherché quoi ?
Rappel du problème : on a une fenêtre, on veut accéder à l'objet
Internet Explorer qui lui est lié, pour utiliser la technique DHTML.
Réponse : pour chaque valeur de IE dans le code d'Alain, on va pouvoir
comparer IE.document.Title à la valeur retournée par GetWindowText sur
l'hWnd de la fenêtre.
Avec quels mots-clefs va-t-on vouloir trouver ça ?
_________________________________________
Alain CROS a écrit, le 21/02/2006 16:18 :
Bonjour,
Peut être une piste.
Sub TrouveFenetreExplorer()
'Ajouter une référence à Microsoft Internet Controls
Dim SW As ShellWindows
Dim IE As Object
Set SW = New ShellWindows
For Each IE In SW
If TypeName(IE.Document) = "HTMLDocument" Then
MsgBox IE.Document.URL
End If
Next IE
Set IE = Nothing
Set SW = Nothing
End Sub
Ah, mais c'est que ça a l'air de marcher, ce truc. Merci.
*
M'étonnerait que je sois le dernier à vouloir faire un truc de cet acabit. Qu'est-ce qu'on mettrait bien comme mots-clefs pour retrouver ça ? "Internet Explorer", fenêtre, objet ? Lier fenêtre à objet Internet Explorer ?
Il en manque, je crois. Appel aux foules : si vous aviez eu ce problème à résoudre, vous auriez cherché quoi ?
Rappel du problème : on a une fenêtre, on veut accéder à l'objet Internet Explorer qui lui est lié, pour utiliser la technique DHTML.
Réponse : pour chaque valeur de IE dans le code d'Alain, on va pouvoir comparer IE.document.Title à la valeur retournée par GetWindowText sur l'hWnd de la fenêtre.
Avec quels mots-clefs va-t-on vouloir trouver ça ? _________________________________________ Alain CROS a écrit, le 21/02/2006 16:18 :
Bonjour,
Peut être une piste.
Sub TrouveFenetreExplorer() 'Ajouter une référence à Microsoft Internet Controls Dim SW As ShellWindows Dim IE As Object Set SW = New ShellWindows For Each IE In SW If TypeName(IE.Document) = "HTMLDocument" Then MsgBox IE.Document.URL End If Next IE Set IE = Nothing Set SW = Nothing End Sub
Alain CROS
Alain CROS
Bonjour,
Déclarer IE as WebBrowser puis utiliser IE.Hwnd
Alain CROS
"Gloops" a écrit dans le message de news: 43fb725e$0$19699$ | | Ah, mais c'est que ça a l'air de marcher, ce truc. | Merci. | | * | | M'étonnerait que je sois le dernier à vouloir faire un truc de cet | acabit. Qu'est-ce qu'on mettrait bien comme mots-clefs pour retrouver ça ? | "Internet Explorer", fenêtre, objet ? Lier fenêtre à objet Internet | Explorer ? | | Il en manque, je crois. Appel aux foules : si vous aviez eu ce problème | à résoudre, vous auriez cherché quoi ? | | Rappel du problème : on a une fenêtre, on veut accéder à l'objet | Internet Explorer qui lui est lié, pour utiliser la technique DHTML. | | Réponse : pour chaque valeur de IE dans le code d'Alain, on va pouvoir | comparer IE.document.Title à la valeur retournée par GetWindowText sur | l'hWnd de la fenêtre. | | Avec quels mots-clefs va-t-on vouloir trouver ça ? | _________________________________________ | Alain CROS a écrit, le 21/02/2006 16:18 : | > Bonjour, | > | > Peut être une piste. | > | > Sub TrouveFenetreExplorer() | > 'Ajouter une référence à Microsoft Internet Controls | > Dim SW As ShellWindows | > Dim IE As Object | > Set SW = New ShellWindows | > For Each IE In SW | > If TypeName(IE.Document) = "HTMLDocument" Then | > MsgBox IE.Document.URL | > End If | > Next IE | > Set IE = Nothing | > Set SW = Nothing | > End Sub | > | > Alain CROS |
Bonjour,
Déclarer IE as WebBrowser
puis utiliser IE.Hwnd
Alain CROS
"Gloops" <gloops@niark.invalid> a écrit dans le message de news: 43fb725e$0$19699$8fcfb975@news.wanadoo.fr...
|
| Ah, mais c'est que ça a l'air de marcher, ce truc.
| Merci.
|
| *
|
| M'étonnerait que je sois le dernier à vouloir faire un truc de cet
| acabit. Qu'est-ce qu'on mettrait bien comme mots-clefs pour retrouver ça ?
| "Internet Explorer", fenêtre, objet ? Lier fenêtre à objet Internet
| Explorer ?
|
| Il en manque, je crois. Appel aux foules : si vous aviez eu ce problème
| à résoudre, vous auriez cherché quoi ?
|
| Rappel du problème : on a une fenêtre, on veut accéder à l'objet
| Internet Explorer qui lui est lié, pour utiliser la technique DHTML.
|
| Réponse : pour chaque valeur de IE dans le code d'Alain, on va pouvoir
| comparer IE.document.Title à la valeur retournée par GetWindowText sur
| l'hWnd de la fenêtre.
|
| Avec quels mots-clefs va-t-on vouloir trouver ça ?
| _________________________________________
| Alain CROS a écrit, le 21/02/2006 16:18 :
| > Bonjour,
| >
| > Peut être une piste.
| >
| > Sub TrouveFenetreExplorer()
| > 'Ajouter une référence à Microsoft Internet Controls
| > Dim SW As ShellWindows
| > Dim IE As Object
| > Set SW = New ShellWindows
| > For Each IE In SW
| > If TypeName(IE.Document) = "HTMLDocument" Then
| > MsgBox IE.Document.URL
| > End If
| > Next IE
| > Set IE = Nothing
| > Set SW = Nothing
| > End Sub
| >
| > Alain CROS
|
"Gloops" a écrit dans le message de news: 43fb725e$0$19699$ | | Ah, mais c'est que ça a l'air de marcher, ce truc. | Merci. | | * | | M'étonnerait que je sois le dernier à vouloir faire un truc de cet | acabit. Qu'est-ce qu'on mettrait bien comme mots-clefs pour retrouver ça ? | "Internet Explorer", fenêtre, objet ? Lier fenêtre à objet Internet | Explorer ? | | Il en manque, je crois. Appel aux foules : si vous aviez eu ce problème | à résoudre, vous auriez cherché quoi ? | | Rappel du problème : on a une fenêtre, on veut accéder à l'objet | Internet Explorer qui lui est lié, pour utiliser la technique DHTML. | | Réponse : pour chaque valeur de IE dans le code d'Alain, on va pouvoir | comparer IE.document.Title à la valeur retournée par GetWindowText sur | l'hWnd de la fenêtre. | | Avec quels mots-clefs va-t-on vouloir trouver ça ? | _________________________________________ | Alain CROS a écrit, le 21/02/2006 16:18 : | > Bonjour, | > | > Peut être une piste. | > | > Sub TrouveFenetreExplorer() | > 'Ajouter une référence à Microsoft Internet Controls | > Dim SW As ShellWindows | > Dim IE As Object | > Set SW = New ShellWindows | > For Each IE In SW | > If TypeName(IE.Document) = "HTMLDocument" Then | > MsgBox IE.Document.URL | > End If | > Next IE | > Set IE = Nothing | > Set SW = Nothing | > End Sub | > | > Alain CROS |
Gloops
Encore plus rapide, effectivement !
Et même avec ShellWindows ça marche.
Bon alors je regroupe le tout (enfin, façon de parler, s'agissant de proposer deux modules) :
Premier module, modInternetExp ((((((((((((((((((((((((((((((((((((((((((( Option Explicit Public IE As InternetExplorer
Public Function NavigateurHwnd(hwnd As Long) As Object Dim SW As ShellWindows Set SW = New ShellWindows For Each IE In SW If IE.hwnd = hwnd Then Debug.Print IE.Document.URL, , IE.hwnd Set NavigateurHwnd = IE 'Set IE = Nothing Set SW = Nothing Exit Function End If Next IE Set IE = Nothing Set SW = Nothing
End Function )))))))))))))))))))))))))))))))))))))))))))))
Deuxième module (((((((((((((((((((((((((((((((((((((((((((( Option Explicit Declare Function GetActiveWindow Lib "user32" _ Alias "GetActiveWindow" () As Long
Sub Main() Dim IE As InternetExplorer Set IE = NavigateurHwnd(GetActiveWindow) MsgBox IE.Document.URL ' et les appels DHTML End Sub )))))))))))))))))))))))))))))))))))))))))))))
On dirait qu'il faut le compiler pour que GetActiveWindow fonctionne mais ça c'est une autre question.
J'ai mis en commentaire Set IE = Nothing, c'est pour ça que j'ai déclaré IE au niveau module, parce que je n'étais pas très sûr de moi quant à passer le contenu d'une variable après l'avoir mise à Nothing.
Si aucune fenêtre Internet Explorer n'est ouverte il m'a semblé que ça ne posait pas de problème, c'est pour ça que j'ai laissé le vidage de la variable à la fin de la fonction. D'ailleurs, en toute logique, la fonction devrait retourner Nothing dans ce cas, donc peut-être que j'aurais dû déclarer la fonction en Variant. _________________________________________ Alain CROS a écrit, le 22/02/2006 08:35 :
Bonjour,
Déclarer IE as WebBrowser puis utiliser IE.Hwnd
Alain CROS
Encore plus rapide, effectivement !
Et même avec ShellWindows ça marche.
Bon alors je regroupe le tout (enfin, façon de parler, s'agissant de
proposer deux modules) :
Premier module, modInternetExp
(((((((((((((((((((((((((((((((((((((((((((
Option Explicit
Public IE As InternetExplorer
Public Function NavigateurHwnd(hwnd As Long) As Object
Dim SW As ShellWindows
Set SW = New ShellWindows
For Each IE In SW
If IE.hwnd = hwnd Then
Debug.Print IE.Document.URL, , IE.hwnd
Set NavigateurHwnd = IE
'Set IE = Nothing
Set SW = Nothing
Exit Function
End If
Next IE
Set IE = Nothing
Set SW = Nothing
End Function
)))))))))))))))))))))))))))))))))))))))))))))
Deuxième module
((((((((((((((((((((((((((((((((((((((((((((
Option Explicit
Declare Function GetActiveWindow Lib "user32" _
Alias "GetActiveWindow" () As Long
Sub Main()
Dim IE As InternetExplorer
Set IE = NavigateurHwnd(GetActiveWindow)
MsgBox IE.Document.URL
' et les appels DHTML
End Sub
)))))))))))))))))))))))))))))))))))))))))))))
On dirait qu'il faut le compiler pour que GetActiveWindow fonctionne
mais ça c'est une autre question.
J'ai mis en commentaire Set IE = Nothing, c'est pour ça que j'ai déclaré
IE au niveau module, parce que je n'étais pas très sûr de moi quant à
passer le contenu d'une variable après l'avoir mise à Nothing.
Si aucune fenêtre Internet Explorer n'est ouverte il m'a semblé que ça
ne posait pas de problème, c'est pour ça que j'ai laissé le vidage de la
variable à la fin de la fonction. D'ailleurs, en toute logique, la
fonction devrait retourner Nothing dans ce cas, donc peut-être que
j'aurais dû déclarer la fonction en Variant.
_________________________________________
Alain CROS a écrit, le 22/02/2006 08:35 :
Bon alors je regroupe le tout (enfin, façon de parler, s'agissant de proposer deux modules) :
Premier module, modInternetExp ((((((((((((((((((((((((((((((((((((((((((( Option Explicit Public IE As InternetExplorer
Public Function NavigateurHwnd(hwnd As Long) As Object Dim SW As ShellWindows Set SW = New ShellWindows For Each IE In SW If IE.hwnd = hwnd Then Debug.Print IE.Document.URL, , IE.hwnd Set NavigateurHwnd = IE 'Set IE = Nothing Set SW = Nothing Exit Function End If Next IE Set IE = Nothing Set SW = Nothing
End Function )))))))))))))))))))))))))))))))))))))))))))))
Deuxième module (((((((((((((((((((((((((((((((((((((((((((( Option Explicit Declare Function GetActiveWindow Lib "user32" _ Alias "GetActiveWindow" () As Long
Sub Main() Dim IE As InternetExplorer Set IE = NavigateurHwnd(GetActiveWindow) MsgBox IE.Document.URL ' et les appels DHTML End Sub )))))))))))))))))))))))))))))))))))))))))))))
On dirait qu'il faut le compiler pour que GetActiveWindow fonctionne mais ça c'est une autre question.
J'ai mis en commentaire Set IE = Nothing, c'est pour ça que j'ai déclaré IE au niveau module, parce que je n'étais pas très sûr de moi quant à passer le contenu d'une variable après l'avoir mise à Nothing.
Si aucune fenêtre Internet Explorer n'est ouverte il m'a semblé que ça ne posait pas de problème, c'est pour ça que j'ai laissé le vidage de la variable à la fin de la fonction. D'ailleurs, en toute logique, la fonction devrait retourner Nothing dans ce cas, donc peut-être que j'aurais dû déclarer la fonction en Variant. _________________________________________ Alain CROS a écrit, le 22/02/2006 08:35 :