PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Liste des fenêtres
Liste des fenêtres
Débuté par Monsieur Serge, 02 fév. 2021 23:37 - 6 réponses
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 02 février 2021 - 23:37
Bonjour,

NombreFenêtre() permet d'obtenir le nombre de fenêtres "Windev" couramment ouvertes.
https://doc.pcsoft.fr/fr-FR/?3064005

Ce nombre est indépendant de la fenêtre source, qui pourrait être ouverte en plus d'une instance.

Est-il possible de lister ces fenêtres "Windev"?
Je ne trouve rien à ce sujet.

Merci.

Serge

--
-----
Parfois, la logique est implacable...
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 02 février 2021 - 23:41
À tout hasard.

Sauf avis contraire, EnumèreElément(enumFenêtre) ne répond pas à mes besoins.

Un même fenêtre source ouverte en plus d'une instance ne sera listée qu'une seule fois.

Serge

--
-----
Parfois, la logique est implacable...
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 04 février 2021 - 04:31
Si jamais un autre développeur a la même question...

Constantes à déclarer:
//--- Première fenêtre de la liste "selon Windows"
GW_HWNDFIRST = 0
//--- Fenêtre suivante dans la liste
GW_HWNDNEXT = 2

//--- ID Windows (Handle) de la fenêtre
es4WHandle est un entier
//--- Longueur du titre de la fenêtre
esLongueur est un entier système
//--- Titre de la fenêtre
chiTitre est une chaîne

//--- Pour les besoins de la trace
x est un entier

//--- Extrait le handle de la première fenêtre de la liste
es4WHandle = AppelDLL32("User32", "GetWindow", Handle(), GW_HWNDFIRST)

TANTQUE es4WHandle <> 0

//--- Est-ce bien une fenêtre ?
SI API("USER32", "IsWindowVisible", es4WHandle) <> 0 ALORS

//--- Contrôle visuel
API("USER32","FlashWindow", es4WHandle, 1) // Flash On

//--- Extrait la longueur du titre de la fenêtre
esLongueur = API("USER32", "GetWindowTextLengthA", es4WHandle) + 1

//--- Prépare la chaîne
chiTitre = Répète(" ", esLongueur)

//--- Extrait le titre
API("USER32", "GetWindowTextA", es4WHandle, chiTitre, esLongueur)

//--- Retire le Null à la fin du titre
chiTitre = Gauche(chiTitre, esLongueur - 1)

//--- Trace
x ++
SI chiTitre <> "" ALORS Trace(x + "-" + chiTitre)
FIN

//--- Suivant dans la liste
es4WHandle = API("USER32", "GetWindow", es4WHandle, GW_HWNDNEXT)
FIN


Bon dev.

Serge

--
-----
Parfois, la logique est implacable...
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 04 février 2021 - 04:37
Une étape supplémentaire, celle qui répond réellement à mon besoin.

Si je connais le titre de la fenêtre, inutile de lister pour retrouver son "handle".
Je peux lui donner le contrôle en deux petites lignes de code.

//--- ID Windows (Handle) de la fenêtre
es4WHandle est un entier

//--- Extrait le Handle de la fenêtre
es4WHandle=API("USER32", "FindWindowA", Null, "TitreDeLaFenêtre")

//--- Lui donne le contrôle
API("USER32", "SetForegroundWindow", es4WHandle)

Trois lignes de code si je considère la déclaration de la variable.
:p

Bon dev.

Serge

--
-----
Parfois, la logique est implacable...
Membre enregistré
170 messages
Popularité : +18 (18 votes)
Posté le 04 février 2021 - 08:43
//--- Extrait le Handle de la fenêtre
soit es4WHandle = API("USER32", "FindWindowA", Null, "TitreDeLaFenêtre")

//--- Lui donne le contrôle
API("USER32", "SetForegroundWindow", es4WHandle)


Et voila, deux lignes ;)

--
Hth,
Padbrain
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 05 février 2021 - 03:18
Je ne la connaissais pas cette déclaration directe.
+1 pour l'astuce.

Serge

--
-----
Parfois, la logique est implacable...
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 05 février 2021 - 03:33
Inférence de type, c'est pourtant listé.
https://doc.pcsoft.fr/fr-FR/?3087003
8)

--
-----
Parfois, la logique est implacable...