Attendre l'apparition d'une fenêtre lancée par Shell [Résolu]

PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 7 févr. 2006 à 15:09 - Dernière réponse : PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention
- 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]
Afficher la suite 

5 réponses

Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 10 févr. 2006 à 18:29
3
Merci
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

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 7 févr. 2006 à 17:53
0
Merci
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)
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 7 févr. 2006 à 18:31
0
Merci
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 7 févr. 2006 à 18:40
0
Merci
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).
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 7 févr. 2006 à 19:34
0
Merci
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.