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

Résolu
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 7 févr. 2006 à 15:09
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 10 févr. 2006 à 18:29
[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

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
10 févr. 2006 à 18:29
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
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
7 févr. 2006 à 17:53
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)
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 26
7 févr. 2006 à 18:31
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
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
7 févr. 2006 à 18:40
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).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 26
7 févr. 2006 à 19:34
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
0