J'essaie d'implémenter une certaine intégration entre une application existante exécutée dans l'émulateur de terminal Reflection et une application basée sur un navigateur fonctionnant dans IE. J'utilise des scripts initiés par l'hôte pour que les problèmes de maintenance et de déploiement soient isolés de l'ancienne application. Tous les scripts seront générés dans l'application héritée et transmis à Reflection en utilisant des séquences d'échappement.Émulateur de terminal de Reflection - Intégration avec IE
Je suis actuellement en mesure de:
- Lancer IE
- Définir les options telles que les barres d'outils cacher
- Naviguer vers une URL
- informations sur l'état de transmission de retour à l'application héritée
- d'attente pour un signal de "fermeture" de l'application existante
- Fermer IE
est ici le code VBA pour le faire:
Sub Main
Dim CR as String
CR = CHR$(rcCR)
Dim objIE as Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.ToolBar = false
objIE.Navigate("http://www.google.com/")
objIE.Visible = true
Session.Transmit "OK" & CR
Session.WaitForString "CLOSE", 0, rcAllowKeystrokes
objIE.Quit
End Sub
Le problème est que le script continue de fonctionner jusqu'à ce qu'il obtienne la commande de fermeture de l'application héritée. Ce que je veux faire est d'utiliser un script pour lancer le navigateur, et un autre pour le fermer ou le réutiliser pour une autre URL. Cependant, je n'ai pas été en mesure de trouver un moyen d'enregistrer ma référence à IE à travers les appels de script. Déclarer objIE comme Global à l'extérieur de Sub Main n'a pas aidé. L'objet Session persiste à travers les appels de script, mais il ne semble pas avoir de propriété que je puisse utiliser à cette fin. (Session a une propriété UserData, mais c'est une chaîne, pas un objet.)
Voici un exemple de ce que je voudrais faire:
Script 1 - Ouvrez Internet Explorer & laisser ouvert:
Sub Main
Dim CR as String
CR = CHR$(rcCR)
Dim objIE as Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.ToolBar = false
objIE.Navigate("http://www.google.com/")
objIE.Visible = true
Session.Transmit "OK" & CR
End Sub
Script 2 - Envoyer fenêtre d'origine IE à une nouvelle URL
Sub Main
Dim CR as String
CR = CHR$(rcCR)
Dim objIE as Object
Set objIE = FindOriginalIE()
objIE.Navigate("http://www.stackoverflow.com/")
Session.Transmit "OK" & CR
End Sub
Script 3 - Fermer IE
Sub Main
Dim CR as String
CR = CHR$(rcCR)
Dim objIE as Object
Set objIE = FindOriginalIE()
objIE.Quit
Session.Transmit "OK" & CR
End Sub
La partie que je ne peux pas comprendre est comment implémenter la fonction FindOriginalIE() utilisé dans les scripts 2 et 3.
J'ai essayé d'utiliser GetObject() au lieu de CreateObject(), mais cela m'a fait nulle part. GetObject() n'ouvrira pas une nouvelle fenêtre IE ou n'en trouvera pas une existante. Je pense que c'est parce que je cours sous Citrix, mais je ne suis pas sûr. Mes seules pistes pour l'instant sont d'essayer d'utiliser IE hWND pour se reconnecter à la fenêtre d'origine, ou d'utiliser DDE au lieu de OLE. Cependant, je n'ai pas eu beaucoup de chance avec l'un ou l'autre de ces problèmes, principalement en raison d'un manque de documentation.
Alors, mes questions sont les suivantes:
- Est-ce que je suis en train de faire possible avec OLE?En d'autres termes, existe-t-il un moyen de maintenir mon adresse IP à travers appels de script initiés par l'hôte?
- Devrais-je m'attendre à ce que GetObject() fonctionne, ou est-ce une impasse?
- Est-il possible d'utiliser l'API Win32 dans un script initié par l'hôte pour se reconnecter à IE à l'aide de hWND?
Tous les liens vers des articles connexes, un exemple de code ou d'autres informations sont grandement appréciés.