PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Manipuler des fenêtres Windows
Manipuler des fenêtres Windows
Iniciado por Lomion, 16,jul. 2019 09:56 - 5 respuestas
Miembro registrado
48 mensajes
Popularité : +1 (1 vote)
Publicado el 16,julio 2019 - 09:56
Bonjour,

Je cherche à manipuler les fenêtres de n'importe quelle application Windows en WLangage.
Je voudrais notamment pouvoir les déplacer d'un écran à l'autre, les iconiser ou les agrandir, etc.
Je parle bien des fenêtres de n'importe quelle appli, pas des fenêtres d'un projet WINDEV :-)
Je suppose qu'il faudra probablement passer par l'utilisation de DLL/fonctions Windows, mais lesquelles ?
A moins qu'il n'existe des fonctions WLangage pour ça ? Mais je n'en ai pas trouvé dans l'aide...

Une idée ?
Lomion
Miembro registrado
945 mensajes
Popularité : +102 (110 votes)
Publicado el 16,julio 2019 - 17:38
bonjour
Pour cela il va falloir envoyer un "message" au "handle" de la fenêtre que vos désirez manipuler
exemple: API(user32_dll, "SendMessageA", <handle>, <num message>, Null, Null)

--
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...
Publicado el 16,julio 2019 - 21:26
Le 16/07/2019 à 07:56, Lomion a écrit :
Bonjour,

Je cherche à manipuler les fenêtres de n'importe quelle application
Windows en WLangage.
Je voudrais notamment pouvoir les déplacer d'un écran à l'autre, les
iconiser ou les agrandir, etc.
Je parle bien des fenêtres de n'importe quelle appli, pas des fenêtres
d'un projet WINDEV :-)
Je suppose qu'il faudra probablement passer par l'utilisation de
DLL/fonctions Windows, mais lesquelles ?
A moins qu'il n'existe des fonctions WLangage pour ça ? Mais je n'en ai
pas trouvé dans l'aide...

Une idée ?
Lomion


Bonjour,

Il y a bien longtemps on regardait sur des sites de ce genre
http://centrewd.free.fr

PYT
Miembro registrado
48 mensajes
Popularité : +1 (1 vote)
Publicado el 17,julio 2019 - 09:02
Bonjour,
Merci pour la réponse. C'est à peu près ce que je pensais, mais je voulais confirmation qu"il n'y avait pas une fonction WLangage toute faite qui ferait déjà le travail :-)
Miembro registrado
355 mensajes
Popularité : +37 (39 votes)
Publicado el 17,julio 2019 - 10:37
Bonjour Lomion,

Regarde les fonctions du WLangage
"SysFenHandle" pour connaitre le handle de la fenêtre non-Windev concernée puis
"SendMessage" ou "PostMessage" pour envoyer des messages à la fenêtre.

Une liste des messages Windows est disponible dans le fichier "C:\Windev 24\Personnel\Externe\Winconst.wl"

Les fonctions et paramètres de chaque message peuvent être trouvés sur le site de Microsoft :
https://docs.microsoft.com/fr-fr/windows/win32/winmsg/windowing

Tiens nous au courant de tes résultats.
A+

--
Francis MOREL
http://www.SoftProtect.fr
Miembro registrado
48 mensajes
Popularité : +1 (1 vote)
Publicado el 31,julio 2019 - 17:54
Pour ceux que ça intéresse, voici un petit bout de code qui liste les "fenêtres" ouvertes et que j'ai écris à partir de vos indications.
J'ai mis "fenêtres" entre guillemets parce qu'il y a pas mal de noms dans le résultat dont je ne sais pas d'où ils viennent. :)
Mais l'essentiel est là !

nLongueurTitre est un entier
hWnd est un entier //long
sfTitreFenêtre est une chaîne fixe sur 255

tabTableauFenêtres est un tableau de chaînes

hWnd = AppelDLL32("User32", "GetWindow", Handle(), 2)

TANTQUE hWnd <> Handle()

Multitâche()
nLongueurTitre = AppelDLL32("User32", "GetWindowTextLengthA", hWnd)

// Récupération du titre
SI AppelDLL32("User32", "GetWindowTextA", hWnd, &sfTitreFenêtre, nLongueurTitre + 1) ALORS

tabTableauFenêtres.Ajoute(sfTitreFenêtre)

FIN
// Fenêtre suivante
hWnd = AppelDLL32("User32", "GetWindow", hWnd, 2)
SI hWnd = 0 ALORS SORTIR
FIN //de TANTQUE

TableauSupprimeDoublon(tabTableauFenêtres, tccSansPonctuationNiEspace)
TableauTrie(tabTableauFenêtres, ttCroissant)

POUR TOUT sUnTitre de tabTableauFenêtres
LISTE_SansNom1.Ajoute(sUnTitre)
FIN