Attendre l'apparition d'une fenêtre lancée par Shell

Résolu
Signaler
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
[VB6]

bonjour,



je croyais m'en sortir seul... faut croire que non.



voilà. j'ouvre une instance d'IE par Shell.

je récupère son handle à partir du pid (testé, c'est ok).



mon problème est le suivant : je veux attendre (while .... doevents)
jusqu'à ce que la fenêtre soit visible à l'écran, mais impossible.



je teste avec IsWindow, IsWindowEnabled, et même SetForegroundWindow, mes retours correspondent à "visible" (alors que ce n'est pas le cas).



existe-t'il une API plus appropriée? ou quelqu'un a déjà été confronté à ce problème? une idée?



merci ;-)



PCPT [AFCK]

5 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
laborieux.....

il faut utiliser IsWindowVisible



voici le code






'

'-> retourne l'état de visibilité d'une fenêtre spécifiée

Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long



'(...)

Do While Not CBool(IsWindowVisible(lHandle))

DoEvents

Loop

'(...)





<small> Coloration
syntaxique automatique [AFCK]</small>





testé avec le vrai Handle, je ne sais pas si le PID donnerait le même résultat.



là en tout cas çà marche



merci à vous, @ bientôt
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Personnellement, cette requète fonctionne :
Do While IsWindowEnabled(hWnd) = 0
DoEvents
Loop
J'attends l'ouverture de NotePad.
Est-ce différent avec IE, je ne pense pas ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
Bonsoir,

Exemple testé avec fenetre IE.
Par contre, moi, je ne sais pas imposer une fenetre (handle ou ID).

Dim objExplorer
Set objExplorer = CreateObject("InternetExplorer.Application")
' ################## AFFICHER UNE FENETRE D'INFORMATION
strComputer = "."
Set objWMIService = GetObject("Winmgmts:\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
objExplorer.Navigate "about:blank"
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Left = (intHorizontal - 800) / 2
objExplorer.Top = (intVertical - 100) / 2
objExplorer.Width = 750
objExplorer.Height = 220
objExplorer.Visible = 1
objExplorer.Document.Body.Style.Cursor = "wait"
objExplorer.Document.Title = fic & " - " & Now
objExplorer.Document.Body.InnerHTML = "
Création du fichier
""" &_
fic & """
en cours , merci de patienter.
"


Dim MyValue, Response, cpt
cpt = 0
Randomize ' Initialise le générateur de nombres aléatoires.
Do Until objExplorer.Document.Body.Style.Cursor <> "wait"
MyValue = Int((6 * Rnd) + 1) ' Génère une valeur aléatoire entre 1 et 6.
MsgBox MyValue

cpt = cpt + 1
If cpt = 10 Then
'Fermeture fenetre IE
objExplorer.Document.Body.Style.Cursor = "default"
objExplorer.Quit
Exit Do
End If
Loop
MsgBox "fenetre IE fermée"



Set WshShell = Nothing
Set Fso = Nothing
Set objExplorer = Nothing
Set objWMIService = Nothing
WScript.Quit
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
Jack -> beh c'est bien ce que je fais, avec un debug.print....


je ne passe même pas dans la boucle, le retour est correct (alors que ce n'est bien sûr le pas cas)


j'ai d'ailleurs "trouvé" (comme quoi le moteur de recherche est plus
utile qu'utilisé) des infos intéressantes sur une de tes sources





JMO -> merci de tes efforts, j'aurais sans doute dû préciser que "IE" n'est qu'un exemple.


en réalité c'est un browser (n'importe quel exe + paramètres en fait).
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
Bonsoir "pcpt", "jack" et les autres

Dans mon exemple, au lieu d'utiliser objExplorer via shell,
on peut (xxxx-être) utiliser Fso et GetObject + la boucle.
Etant néophyte, je ne vous embete pas plus et suis avec interet la
réponse finale de ce post.

jean-marc