Comment mettre au premier plan la fenêtre trouvée

Banosjo

XLDnaute Junior
Bonjour,

J'ai la macro suivante qui cherche parmi les fenêtres ouvertes une fenêtre particulière (dont l'adresse contient l'expression "TaskType") .. La macro trouve la fenêtre mais je n'arrive pas à la faire apparaître au premier plan :

Sub Recherche()

Dim Resultat As String
Dim appIE As Object 'InternetExplorer
Dim HTMLDoc As Object 'HTMLDocument
Dim winShell As Object 'New ShellWindows
Set appIE = CreateObject("InternetExplorer.Application")
Set winShell = CreateObject("Shell.Application").Windows

'Recherche la bonne page
For Each appIE In winShell
If InStr(appIE.LocationURL, "TaskType") <> 0 Then
appIE.Visible = True
Set HTMLDoc = appIE.document
Resultat = HTMLDoc.documentElement.innerHTML
MsgBox ("Page trouvée")
End If
Next appIE

If Resultat = "" Then
MsgBox ("Page non trouvée")
End If

End Sub


J'aimerais faire afficher la fenêtre trouvée au premier plan et que le reste de la macro (à développer) puisse continuer de s'exécuter ..

Seriez-vous en mesure de m'éclairer ?

Merci d'avance !!
 

Banosjo

XLDnaute Junior
Re : Comment mettre au premier plan la fenêtre trouvée

Rebonsoir,

Merci Hippolite !

Cela ne fonctionne malheureusement pas ou c'est que je n'arrive pas à bien l'insérer dans mon code .. pourrais-je avoir des précisions svp ?

Au plaisir de vous lire !
 

Staple1600

XLDnaute Barbatruc
Re : Comment mettre au premier plan la fenêtre trouvée

Bonjour


Une question au passage
Le script de Banosio ne fonctionne pas sur mon PC. (Il semble que ce soit lié à l'installation d'IE 9) -
evbscript.gif
Code:
Sub test()
Dim Resultat As String
Dim appIE As Object 'InternetExplorer
Dim HTMLDoc As Object 'HTMLDocument
Dim winShell As Object 'New ShellWindows
Set appIE = CreateObject("InternetExplorer.Application")
Set winShell = CreateObject("Shell.Application").Windows ' <- c'est ici que ca coince
End Sub


D'autres personnes ont-ils rencontré ce problème ?
 
Dernière édition:

Hippolite

XLDnaute Accro
Re : Comment mettre au premier plan la fenêtre trouvée

Bonjour,
appIE.activate devrait mettre IE au premier plan
ensuite HTMLDoc.activate doit mettre le bon document IE en premier plan s'il y en a plusieurs ouverts

Sinon fais une recherche sur SetForegroundWindow

ou utilise :
Fonction : AppliActivate
Active et met au premier plan une fenêtre particulière.
VB:
Public Function AppliActivate(stAppName As String) As Long
' Activation et mise au premier plan d'une application
' stAppName doit contenir le nom exact de l'application (barre de titre).
Dim lgHwnd As Long, lgRet As Long
' Récupération du handle de la fenêtre de l'application
' que l'on cherche à activer
lgHwnd = FindWindow(vbNullString, stAppName)
' Si la fenêtre ne peut être trouvée
If Not (lgHwnd > 0) Then
    ' Impossible d'activer (retour erreur)
    lgRet = 0
Else
    ' Mise au premier plan et activation de la fenêtre de
    ' l'application d'après son handle
    ShowWindow lgHwnd, SW_SHOWMAXIMIZED
    ' Activation réussie
    lgRet = -1
End If
' Retourne le code erreur
AppliActivate = lgRet
End Function
A+
 

Banosjo

XLDnaute Junior
Re : Comment mettre au premier plan la fenêtre trouvée

Re,

Moi je fonctionne sous XP avec IE7 mais Staple1600 soulève un bon point pour la question de compatibilité avec IE9 .. j'en prend bonne note.

Malheureusement, j'ai poursuivi ma recherche et je n'ai toujours pas réussi à mettre au premier plan la fenêtre d'Internet Explorer trouvée (je ne pensais pas que cette simple opération pouvait être aussi compliquée!) :)

J'ai essayé d'adapter l'exemple de Hippolite et aussi un autre trouvé à Bring Excel to foreground from VBA (en le modifiant pour IE) mais sans succès :(

Je poursuis donc ma recherche et si vous avez d'autres conseils n'hésitez pas !! Merci beaucoup !
 

Hippolite

XLDnaute Accro
Re : Comment mettre au premier plan la fenêtre trouvée

Re,
Tu mets en déclaration
Code:
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
et tu fais apparaître la fenêtre avec
Code:
Call SetForegroundWindow(appIE.hwnd)
A+
 

Hippolite

XLDnaute Accro
Re : Comment mettre au premier plan la fenêtre trouvée

Re,
Je n'ai pas la pratique de vista, mais les problèmes de compatibilité viennent peut-être de :
Remarques
Internet Explorer 8. Sous Windows Vista, pour créer une instance d'Internet Explorer en cours d'exécution à un niveau d'intégrité moyen, passer CLSID_InternetExplorerMedium (défini dans exdisp.idl) à CoCreateInstance. L'objet résultant InternetExplorerMedium prend en charge les mêmes événements, les méthodes et les propriétés que l'objet InternetExplorer.
source : Ce lien n'existe plus
A+
 
Dernière édition:

Hippolite

XLDnaute Accro
Re : Comment mettre au premier plan la fenêtre trouvée

Re,
En complément
Remarque de sécurité
La fonction CreateObject nécessite une permission de code non managée, qui peut affecter son exécution dans les situations d'un niveau de confiance partiel. Pour plus d'informations, consultez SecurityPermission et Autorisations d'accès du code.
source : Ce lien n'existe plus
 

Staple1600

XLDnaute Barbatruc
Re : Comment mettre au premier plan la fenêtre trouvée

Bonsoir


Merci pour ces informations , Hippolite

J'ai testé certains de mes anciens scripts vbs d'automation d'IE (donc sous Vista + IE9)

Les plus basiques fonctionnent toujours.
Celui-là par exemple Ok
Code:
dim ie
set ie = createobject("internetexplorer.application")
ie.top = 100
ie.left = 100
ie.width = 640
ie.height = 480
ie.navigate "about:blank"
ie.visible = true
Celui aussi OK
Code:
Dim IE
Dim Shell
Set Shell = Wscript.CreateObject("Shell.Application")
Shell.MinimizeAll
Set IE = CreateObject("InternetExplorer.Application")
IE.visible = true:IE.FullScreen = true:IE.Navigate "about:blank"
Mais là j'ai une coquille dans le Shell ;) avec le code proposé par Banosjo.
 
Dernière édition:

Banosjo

XLDnaute Junior
Re : Comment mettre au premier plan la fenêtre trouvée

Re,

Ça marche super bien et quelle simplicité !!! Merci énormément Hippolite :)

Après quelques tests, le code suivant permet aussi de mettre au premier plan la page trouvée, même si celle-ci est minimisée dans la barre des tâches. La seule éventualité que le bout de code ne traite pas encore est si une page a plusieurs onglets (mais ce n'est pas dramatique!) :

VB:
 Public Declare Function GetWindowThreadProcessId Lib _
 "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Public Declare Function AttachThreadInput Lib "user32" _
(ByVal idAttach As Long, ByVal idAttachTo As Long, _
 ByVal fAttach As Long) As Long
Public Declare Function GetForegroundWindow Lib "user32" () As Long
Public Declare Function SetForegroundWindow Lib "user32" _
 (ByVal hWnd As Long) As Long
Public Declare Function IsIconic Lib "user32" _
  (ByVal hWnd As Long) As Long
Public Declare Function ShowWindow Lib "user32" _
 (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Declare Function FindWindowA Lib "user32" (ByVal lpClassName _
  As Long, ByVal lpWindowName As String) As Long

Const SW_SHOW = 5
Const SW_RESTORE = 9

Function ForceForegroundWindow(ByVal hWnd As Long) As Boolean
    Dim ThreadID1 As Long
    Dim ThreadID2 As Long
    Dim nRet As Long

Debug.Print hWnd

    If hWnd = GetForegroundWindow Then
        ForceForegroundWindow = True
    Else
        ThreadID1 = GetWindowThreadProcessId( _
          GetForegroundWindow, ByVal 0&)
        ThreadID2 = GetWindowThreadProcessId(hWnd, ByVal 0&)
        If ThreadID1 <> ThreadID2 Then
            AttachThreadInput ThreadID1, ThreadID2, True
            nRet = SetForegroundWindow(hWnd)
            AttachThreadInput ThreadID1, ThreadID2, False
        Else
            nRet = SetForegroundWindow(appIE.hWnd)
        End If
        If IsIconic(hWnd) Then
            ShowWindow hWnd, SW_RESTORE
        Else
            ShowWindow hWnd, SW_SHOW
        End If
        ForceForegroundWindow = CBool(nRet)
    End If
End Function

Et on l'appelle avec (trouvé grâce à l'aide de Hippolite!) :

VB:
Call ForceForegroundWindow(appIE.hWnd)

À savoir la compatibilité avec les prochaines versions de IE, je suis avec intérêt la suite de votre dicussion :)

Merci !
 

Staple1600

XLDnaute Barbatruc
Re : Comment mettre au premier plan la fenêtre trouvée

Bonjour

Pour info (comme cela m'intriguait)
J'ai désinstallé IE9

et donc maintenant : Vista + IE8 -> le code Sub Recherche() fonctionne désormais sans erreur !

Vous voilà prévenu ;)

Upgradez qui disait !
 

Discussions similaires

Réponses
0
Affichages
264
Réponses
8
Affichages
638

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch