|
Liste des fenêtres ouvertes sur le bureau |
Débuté par Sauveur CONSALVI, 20 sep. 2020 17:00 - 23 réponses |
| |
| | | |
|
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 20 septembre 2020 - 17:00 |
Bonjour, J'ai trouvé une multitude de question sur ce sujet Ce code me donne bien les deux fenêtres ouvertes, mais il en affiche aussi d'autres !
Lg, Ok, hWnd sont des entiers hWnd = AppelDLL32("User32", "GetWindow", Handle(), 2) lpString est une chaîne fixe sur 255 TANTQUE hWnd <> 0 Lg = AppelDLL32("User32", "GetWindowTextLengthA", hWnd) Ok = AppelDLL32("User32", "GetWindowTextA", hWnd, &lpString, Lg + 1) SI Ok ALORS SI AppelDLL32("user32","IsWindowVisible",hWnd) ALORS ListeAjoute(LISTE_Processus,lpString) FIN FIN hWnd = AppelDLL32("User32", "GetWindow", hWnd, 2) FIN Voici le résultat, mais pour moi, seul les deux premières listées sont "correctes" D'où vienne les autres ?
Comment faire pour n'avoir QUE les FENÊTRES OUVERTES sur le BUREAU ??? Cordialement SC
-- Cordialement SC |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 20 septembre 2020 - 17:45 |
bonjour en ajoutant le test : IF API("User32.dll", "IsWindowVisible",hWnd) THEN Trace(lpString) es que cela résoud votre problème ?
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 20 septembre 2020 - 17:59 |
;(désolé je n'av&is pas vu que vous utilisier déja la fonction
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 20 septembre 2020 - 19:00 |
avec ce code vous devriez trouver une solution
stPOINT est une structure sx est un entier système sy est un entier système END stRECT est une structure sleft est un entier système top est un entier système sright est un entier système sbottom est un entier système END
stWINDOWPLACEMENT est une structure slength est un entier sans signe sur 4 octets sflags est un entier sans signe sur 4 octets sshowCmd est un entier sans signe sur 4 octets sptMinPosition est un stPOINT sptMaxPosition est un stPOINT srcNormalPosition est un stRECT srcDevice est un stRECT END
Lg, Ok, hWnd sont des entiers hWnd = AppelDLL32("User32", "GetWindow", Handle(), 2) lpString est une chaîne fixe sur 255 WindowPlacement est une stWINDOWPLACEMENT
TANTQUE hWnd <> 0 Lg = AppelDLL32("User32", "GetWindowTextLengthA", hWnd) Ok = AppelDLL32("User32", "GetWindowTextA", hWnd, &lpString, Lg + 1) SI Ok ALORS IF API("User32.dll", "IsWindowVisible",hWnd) THEN WindowPlacement:slength = Dimension(WindowPlacement) IF API("user32.dll","GetWindowPlacement", hWnd, &WindowPlacement) THEN Trace(Remplace(lpString, Caract(0x0), "") + TAB + NumériqueVersChaîne(WindowPlacement:sflags) + TAB + NumériqueVersChaîne(WindowPlacement:sshowCmd)) FIN FIN END hWnd = AppelDLL32("User32", "GetWindow", hWnd, 2) END
Trace("------------------------")
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 21 septembre 2020 - 09:48 |
Bonjour, Merci de votre aide
sptMaxPosition est un stPOINT srcNormalPosition est un stRECT Sont en erreur, mais comme ils ne sont pas utilisés, je les ai mis en commentaire Le résultat est plus "riche", mais en ne ne reprenant que lpString je retrouve les mêmes informations ... Voici le résultat complet
Et le résultat allégé
Le gestionnaire des tâches répond pas lui aussi à mon besoin, car il n'a pas détecté Rainlendar (Calendar) ....
Comment améliorer le filtrage ?
-- Cordialement SC |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 21 septembre 2020 - 11:03 |
J'ai une autre "expérience" ... J'ai généré l'exécutable, j'ai fermé tout ce que je pouvais, et j'ai lancé l'EXE J'ai aussi lancé le gestionnaire des tâches, et j'ai fait une copie écran du résultat, la voici
Je ne "pige" rien au résultat ! Il me faudrait une formation système sur Windows Mais je me demande si l'on peut résoudre ce cas, puisque même les outils Windows ne le font pas
-- Cordialement SC |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 21 septembre 2020 - 18:09 |
Bonjour "Sont en erreur, mais comme ils ne sont pas utilisés, je les ai mis en commentaire" Bien sur qu'ils sont utilisés par la fonction : GetWindowPlacement, vu que l'on passe la taille de la structure. Quel est l'erreur ?
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 21 septembre 2020 - 18:27 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 22 septembre 2020 - 12:05 |
Bonjour, C'est le type stPOINT qui n'est pas reconnu et passe en erreur Les avoir passés en commentaire n'a pas fait d'erreur Je vais voir pour WindowPlacement:sshowCmd, mais je ne pense pas réussir à coder en Windev
-- Cordialement SC |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 22 septembre 2020 - 14:55 |
bonjour
stPOINT est une structure sx est un entier système sy est un entier système END " mais je ne pense pas réussir à coder en Windev" pourquois ? Quelle version de Windev ?
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 22 septembre 2020 - 16:47 |
Bonsoir, Car je ne suis pas assez "calé" ... Il donne un exemple en C++ Et je n'ai jamais manipulé les API Cordialement SC
-- Cordialement SC |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 22 septembre 2020 - 17:07 |
Bonjour Donnez moi l'exemple en C++ je devrais pouvoir vous le traduire
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 22 septembre 2020 - 17:16 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 22 septembre 2020 - 17:33 |
la traduction est celle que je vous ai donné...
stPOINT est une structure sx est un entier système sy est un entier système END
stRECT est une structure sleft est un entier système top est un entier système sright est un entier système sbottom est un entier système END
stWINDOWPLACEMENT est une structure slength est un entier sans signe sur 4 octets sflags est un entier sans signe sur 4 octets sshowCmd est un entier sans signe sur 4 octets sptMinPosition est un stPOINT sptMaxPosition est un stPOINT srcNormalPosition est un stRECT srcDevice est un stRECT END
TANTQUE hWnd <> 0 Lg = AppelDLL32("User32", "GetWindowTextLengthA", hWnd) Ok = AppelDLL32("User32", "GetWindowTextA", hWnd, &lpString, Lg + 1) SI Ok ALORS IF API("User32.dll", "IsWindowVisible",hWnd) THEN WindowPlacement:slength = Dimension(WindowPlacement) IF API("user32.dll","GetWindowPlacement", hWnd, &WindowPlacement) THEN Trace(Remplace(lpString, Caract(0x0), "") + TAB + NumériqueVersChaîne(WindowPlacement:sflags) + TAB + NumériqueVersChaîne(WindowPlacement:sshowCmd)) FIN FIN END hWnd = AppelDLL32("User32", "GetWindow", hWnd, 2) END si vous avez une erreur faire une copie d'écran de votre code
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 23 septembre 2020 - 09:41 |
Bonjour, En premier lieu, merci de votre dévouement et disponibilité J'ai "modifié" le code pour avoir des boutons "indépendants" J'espère ne pas avoir fait d'erreur ...
stPOINT est une structure sx est un entier système sy est un entier système END
stRECT est une structure sleft est un entier système top est un entier système sright est un entier système sbottom est un entier système END
stWINDOWPLACEMENT est une structure slength est un entier sans signe sur 4 octets sflags est un entier sans signe sur 4 octets sshowCmd est un entier sans signe sur 4 octets sptMinPosition est un stPOINT sptMaxPosition est un stPOINT srcNormalPosition est un stRECT srcDevice est un stRECT END WindowPlacement est une stWINDOWPLACEMENT
hWnd est un entier système Lg, Ok sont des entiers lpString est une chaîne fixe sur 255
hWnd = AppelDLL32("User32", "GetWindow", Handle(), 2)
TANTQUE hWnd <> 0 Lg = AppelDLL32("User32", "GetWindowTextLengthA", hWnd) Ok = AppelDLL32("User32", "GetWindowTextA", hWnd, &lpString, Lg + 1) SI Ok ALORS IF API("User32.dll", "IsWindowVisible",hWnd) THEN WindowPlacement:slength = Dimension(WindowPlacement) IF API("user32.dll","GetWindowPlacement", hWnd, &WindowPlacement) THEN Trace(Remplace(lpString, Caract(0x0), "") + TAB + NumériqueVersChaîne(WindowPlacement:sflags) + TAB + NumériqueVersChaîne(WindowPlacement:sshowCmd)) ListeAjoute(LISTE_Processus,lpString) FIN FIN END hWnd = AppelDLL32("User32", "GetWindow", hWnd, 2) END Voici les copies écran du résultat, en test et par l'exécutable
Les fenêtres ouvertes sont bien détectées, mais d'autres processus aussi ... Cordialement SC
-- Cordialement SC |
| |
| |
| | | |
|
| | |
| |
Posté le 23 septembre 2020 - 10:46 |
Bonjour,
quelques ajouts et corrections signalér par //<<<<<<<<<<<
Procedure ListeFenêtresOuvertes()
stPoint est une structure sx est un entier système sy est un entier système END stRECT est une structure Left est un entier système top est un entier système Right est un entier système bottom est un entier système END
stWINDOWPLACEMENT est une structure slength est un entier sans signe sur 4 octets sflags est un entier sans signe sur 4 octets sshowCmd est un entier sans signe sur 4 octets sptMinPosition est un stPoint sptMaxPosition est un stPoint srcNormalPosition est un stRECT srcDevice est un stRECT END
tabShowCmd est tableau associatif (*, *, wlEntier) de chaînes =... [[0, "SW_HIDE"], [1, "SW_SHOWNORMAL"], [2, "SW_SHOWMINIMIZED"], [3, "SW_MAXIMIZE"], [3, "SW_SHOWMAXIMIZED"], [4, "SW_SHOWNOACTIVATE"], [5, "SW_SHOW"], [6, "SW_MINIMIZE"], [7, "SW_SHOWMINNOACTIV"], [8, "SW_SHOWNA"], [9, "SW_RESTORE"] ]
tabFlags est tableau associatif (*, *, wlEntier) de chaînes =... [[1, "WPF_SETMINPOSITION"], [2, "WPF_RESTORETOMAXIMIZED"], [4, "WPF_ASYNCWINDOWPLACEMENT"] ]
Lg, Ok, hWnd sont des entiers hWnd = AppelDLL32("User32", "GetWindow", Handle(), 2) lpString est une chaîne fixe sur 255 WindowPlacement est une stWINDOWPLACEMENT
TANTQUE hWnd <> 0 Lg = AppelDLL32("User32", "GetWindowTextLengthA", hWnd) lpString = Répète(Caract(0),255) Ok = AppelDLL32("User32", "GetWindowTextA", hWnd, &lpString, Lg + 1) SI Ok ALORS IF API("User32.dll", "IsWindowVisible",hWnd) THEN VariableRAZ(WindowPlacement) WindowPlacement:slength = Dimension(WindowPlacement) IF API("user32.dll","GetWindowPlacement", hWnd, &WindowPlacement) THEN AVEC WindowPlacement SI tabFlags[.sflags] <> "" ALORS Trace(Remplace(lpString, Caract(0), "") + TAB + tabFlags[.sflags] + TAB + tabShowCmd[.sshowCmd], .srcNormalPosition.left, .srcNormalPosition.top, .srcNormalPosition.right - .srcNormalPosition.left, .srcNormalPosition.bottom - .srcNormalPosition.top) FIN FIN FIN FIN END hWnd = AppelDLL32("User32", "GetWindow", hWnd, 2) END
Trace("------------------------") |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 23 septembre 2020 - 14:41 |
Bonjour, Merci de votre aide La fenêtre est détectée en mode test, rien en exécution Rainlendar et FireFox ne sont pas détectés ... J'ai ajouté en plus du TRACE la liste et INFO
-- Cordialement SC |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 213 messages Popularité : +12 (12 votes) |
|
Posté le 04 février 2021 - 03:19 |
Bonsoir,
Comme j'ai un requis similaire je me permets un ajout.
Constantes à déclarer: GW_HWNDFIRST = 0 // Première fenêtre selon le bon vouloir de Windows GW_HWNDNEXT = 2 // Fenêtre suivante dans la liste
es4WHandle est un entier
esLongueur est un entier système
chiTitre est une chaîne
x est un entier
es4WHandle = AppelDLL32("User32", "GetWindow", Handle(), GW_HWNDFIRST)
TANTQUE es4WHandle <> 0 x ++ SI API("USER32", "IsWindowVisible", es4WHandle) <> 0 ALORS SI EnModeTest() ALORS API("USER32","FlashWindow", es4WHandle, 1)
esLongueur = API("USER32", "GetWindowTextLengthA", es4WHandle) + 1
chiTitre = Répète(" ", esLongueur)
API("USER32", "GetWindowTextA", es4WHandle, chiTitre, esLongueur)
chiTitre = Gauche(chiTitre, esLongueur - 1)
SI chiTitre <> "" ALORS Trace(x + "-" + chiTitre) FIN
es4WHandle = API("USER32", "GetWindow", es4WHandle, GW_HWNDNEXT) FIN
L'API "FlashWindow" me permet de contrôler que la routine a bien détectée chaque fenêtre de la barre de tâches. Incluant la fenêtre de test alors que j'exécute ce test depuis Windev.
J'ai bien quelques fenêtres de "process Windows" dans la liste, mais ça ne m'empêche pas de vivre.
Bon dev.
Serge
-- ----- Parfois, la logique est implacable... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 04 février 2021 - 11:22 |
Bonjour, Merci de ce code Mais pour mon usage il reste encore trop de "process Windows" dans la liste, et je ne sais comment les identifier ... Cdlt SC
-- Cordialement SC |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 04 février 2021 - 12:44 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 04 février 2021 - 17:18 |
Bonjour, J'ai bien téléchargé la Classe, et je l'ai incorporé à mon projet Mais comment s'en servir ??? (Je n'ai pratiquement jamais utilisé de Classe, ni fait de POO) J'ai créé une table "tabWinInfos", sans trop savoir quoi mettre comme colonne ... Mais ensuite ? Merci de votre aide
-- Cordialement SC |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 04 février 2021 - 17:31 |
hello, tabwininfos n'est pas une table mais un tableau de structure. Dans le lien il y a un exemple qui recherche la fenêtre de notepad et ses sous-fenêtres
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 213 messages Popularité : +12 (12 votes) |
|
Posté le 05 février 2021 - 03:07 |
Jurassic,
Selon moi ta classe, tout comme ma suggestion, ne répond pas au besoin de Sauveur.
Tu n'aurais pas, dans l'une de tes classes, celle qui permet de ne lister QUE les fenêtres du Taskbar ? Pas les icônes qui se trouvent sur la droite, mais bien les "fenêtres".
Je dois avouer que j'aimerais bien fouiller cette collection de classes que tu as.
Bon dev.
Serge
-- ----- Parfois, la logique est implacable... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 373 messages Popularité : +7 (7 votes) |
|
Posté le 05 février 2021 - 07:42 |
Bonjour, Merci à Serge qui a bien précisé mon besoin Je veux pouvoir signaler à l'utilisateur les fenêtres ouverte sur le bureau Pas les processus actifs J'espère qu'un spécialiste donneras la solution ...
-- Cordialement SC |
| |
| |
| | | |
|
| | | | |
| | |
|