IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

API Windows - EnumWindows [WD11]


Sujet :

WinDev

  1. #1
    Membre confirmé Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Par défaut API Windows - EnumWindows
    Salut à tous,

    Je suis en train de concevoir une application qui se lance au démarrage d'une session Windows. L'application en question gère des stratégies chargées de masquer la barre des tâches et interdire l'accès au bureau Windows. En contrepartie, elle donne la possibilité d'ouvrir certains programmes en cliquant sur les boutons correspondants.

    Seul hic, c'est que si l'utilisateur ouvre plusieurs application, il ne va pas pouvoir basculer de l'une à l'autre vu que le barre des tâches est masquée.

    Je me suis alors tourné vers une fenêtre qui affiche la liste des applications en cours. J'ai regardé du coté des API avec notamment "EnumWindows".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TableSupprimeTout(TABLE_Applications)
    API("User32","EnumWindows",&ProcEnumFenêtre,0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PROCEDURE ProcEnumFenêtre(nHwnd est un entier système, nIDFichier est un entier système)
    	nTailleMaxNomClasse est un entier = 1024
    	sNomClasseDeFenetre est une chaîne ASCIIZ sur 1024
    	sTitreFenetre est une chaîne
    	API("user32","GetClassNameA",nHwnd,&sNomClasseDeFenetre,nTailleMaxNomClasse)
    	sTitreFenetre = SysFenTitre(nHwnd)
    	SI sTitreFenetre~="" ALORS 
    		RENVOYER Vrai
    	SINON 
    		TableAjoute(TABLE_Applications,TAB+sTitreFenetre+TAB+sNomClasseDeFenetre)
    		RENVOYER Vrai
    	FIN
    Le problème c'est que cette fonction me renvoi un nombre incroyable de programmes, très loin des quelques fenêtres que j'ai à l'écran...

    Quelqu'un a déjà utilisé cette fonction de l'API User32 ? Une idée pour restreindre l'affichage aux seuls fenêtres ouvertes ?

    Merci d'avance...

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 192
    Par défaut
    bonjour,

    voici du code pour lister les fenêtres ouvertes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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
    	          Trace(lpString)
    	   FIN
    	FIN //de Ok
    	// On passe à la fenêtre suivante...
    	hWnd = AppelDLL32("User32", "GetWindow", hWnd, 2)
    FIN //de TANTQUE
    Ami calmant, J.P

  3. #3
    Membre confirmé Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Par défaut
    Super ! Merci jurassic pork !

    Il me laisse tout de même 2 applications en plus : le gestionnaire de programme et un composant AMD, mais bon vu que ce n'est pas des fenêtre "affichables", ça n'a aucune importance.

    Au final voilà le petit morceau de code, si ça peut aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    PROCEDURE ProcEnumFenêtre()
    //Insère la liste des fenêtres dans la table
    Lg, Ok, nHWnd sont des entiers
    nHWnd = AppelDLL32("User32", "GetWindow", Handle(), 2)
    lpString est une chaîne fixe sur 255
     
    TANTQUE  nHWnd <> 0
    	Lg = AppelDLL32("User32", "GetWindowTextLengthA",  nHWnd)
    	Ok = AppelDLL32("User32", "GetWindowTextA",  nHWnd, &lpString, Lg + 1)
    	SI Ok ALORS
    		SI AppelDLL32("user32","IsWindowVisible", nHWnd) ALORS
    			TableAjoute(TABLE_Applications,nHWnd+TAB+lpString)
    		FIN
    	FIN 
    	 nHWnd = AppelDLL32("User32", "GetWindow",  nHWnd, 2)
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Met la fenêtre sélectionné au premier plan
    nHWnd est un entier=COL_PID
    API("User32", "ShowWindow", nHWnd, 6)
    SI API("User32", "ShowWindow", nHWnd, 1)=0 ALORS
    	Erreur("Impossible de ramener cette fenêtre au premier plan !")
    FIN

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 29
    Dernier message: 14/01/2013, 10h40
  2. tutoriel : La programmation de l'API Windows en C++ par Bob
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 19
    Dernier message: 21/06/2008, 14h34
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. [API Windows] Polices de caractères disponibles
    Par bebeours dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/11/2003, 08h28
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo