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

GTK+ avec C & C++ Discussion :

Obtenir la liste des fenêtres ouvertes


Sujet :

GTK+ avec C & C++

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut Obtenir la liste des fenêtres ouvertes
    Bonjour
    je suis complètement débutant en gtk...
    je souhaiterais pouvoir récupérer la liste de l'ensemble des fenêtres ouvertes, afin de pouvoir agir (mise en 1er plan) sur ces fenêtres
    j'ai vu qu'on pouvait utiliser gdk http://library.gnome.org/devel/gdk/index.html
    mais je trouve pas ce que je veux..
    vous auriez une autre piste ou une autre idée ?

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    D'où sortent tes fenêtres ? C'est ton application qui possède plusieurs fenêtres ou tu parle de toutes les fenêtres de ton système ?

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Il s'agit de toute les fenêtres du système, j'ai beau cherché depuis tout à l'heure..

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Merci de ta réponse, alors j'ai testé et ça ne semble pas fonctionner j'ai testé avec gdk_display_get_default_screen et gdk_screen_get_toplevel_windows

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include <gtk/gtk.h>
    #include <gdk/gdk.h>
    #include <stdio.h>
     
    typedef struct _WnckSelector WnckSelector;
     
    int main( int   argc,
              char *argv[] )
    {
        GtkWidget *window;
     
        GdkScreen *screen = NULL;
        GdkDisplay *display = NULL;
        GList *glist = NULL;
     
        gtk_init (&argc, &argv);
     
        //creation sans decoration
        window = gtk_window_new (GTK_WINDOW_POPUP);
     
        //position
        gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
     
        //taille
        gtk_window_set_default_size(GTK_WINDOW(window), 350, 100);
     
        display = gdk_display_get_default ();
        screen = gdk_display_get_default_screen (display);
     
         printf("a - nb element : %d!\n",g_list_length(glist));
     
        glist = gdk_screen_get_toplevel_windows (screen);
     
        printf("b - nb element : %d!\n",g_list_length(glist));
     
        glist = gdk_window_get_toplevels  ();
     
        printf("c - nb element :  %d!\n",g_list_length(glist));
     
     
        //montrage
        gtk_widget_show_all(window);
     
        gtk_main ();
     
        return 0; 
    }
    à cela, j'obtiens l'affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a - nb element : 0!
    b - nb element : 1!
    c - nb element :  1!
    donc en gros, une seule fenêtre dans la liste, alors que normalement il devrait y en avoir 4 ou 5

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Cartouche Voir le message
    donc en gros, une seule fenêtre dans la liste, alors que normalement il devrait y en avoir 4 ou 5
    La fonction que je t'ai donné renvoi uniquement les fenêtre "top level" en gros la fenêtre principale des applications (pas les boite de dialogue ou autre).

    Sinon tu peux récupérer la fenêtre mère avec gdk_get_default_root_window (je pense que sous gnome, il s'agit du bureau), et chaque fenêtre filles est en faites une fenêtre "top level", qui elle même peuvent avoir des enfant (boite de dialogue, écran de démarrage).

    Je ne fait que lire la doc, donc je peux raconter n'importe quoi, j'essayerai de faire un p'tit code mais ça ne sera pas avant Lundi

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Tu cherches pas à faire ce que fait devil's pie ? http://burtonini.com/blog/computers/devilspie

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    @teuf13, jai fais une petite recherche sur devilspie et apparemment c'est pas ce que je veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Devil's Pie est un logiciel qui, dans le gestionnaire de fenêtres Metacity (gestionnaire utilisé par Gnome) permet de détecter les caractéristiques des fenêtres et de leur appliquer des règles de comportement.
    d'autant plus que je suis pas sous gnome, mais fluxbox
    en réalité, j'aimerais pouvoir faire un selecteur de fenêtre visuel avec alt-tab, d'où mon besoin de connaitre la liste des fenêtres ouvertes..

    @gege2061, alors j'ai testé gdk_get_default_root_window suivis de gdk_window_get_children () mais la liste obtenu contient toujours un seul élément

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    La libwnck (utilisée par metacity) doit abstraire une grande partie de ce qui est nécessaire pour faire ce sélectionneur de tâches. En tout cas ça doit pouvoir être utile de regarder son code. devil's pie doit marcher avec tout window manager supportant les standards ewmh & co (ce qui doit êtrel e cas de fluxbox)

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Alors je me suis un peu plus penché sur libwnck
    ça me retourne ceci à la compilation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    In file included from /usr/include/libwnck-1.0/libwnck/libwnck.h:26,
                     from tab2.c:3:
    /usr/include/libwnck-1.0/libwnck/window.h:28:2: error: #error "libwnck should only be used if you understand that it's subject to frequent change, and is not supported as a fixed API/ABI or as part of the platform"
    j'ai l'impression que ça refuse d'être utilisé comme api
    sinon je vais voir un peu comment est fais devil spie

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Y a un truc à définir avant d'inclure les headers de la libwnck puor montrer qu'on sait que l'api risque d'être modifiée, ...

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Merci, au temps pour moi
    pour ceux que ça intéresse, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define WNCK_I_KNOW_THIS_IS_UNSTABLE
    avant d'inclure la librairie, je vais donc pouvoir continuer à explorer

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Bon je n'y suis pas arrivé
    j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WnckScreen *screen0;
    GList *glist1;
     
    screen0 = wnck_screen_get_default ();  
    glist1 =  wnck_screen_get_windows(screen0);
    printf("nb element : %d\n",g_list_length(glist1));
    et le nombre d'élement de la liste de fenêtre est toujours nul..

    j'ai aussi regardé du coté de WnckClassGroup
    mais je n'ai pas trouvé comment indiquer une classe qui reroupe toutes les fenêtres, bref

Discussions similaires

  1. Liste des fenêtres ouvertes !
    Par djiga4me dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 26/09/2010, 20h37
  2. liste des applications ouvertes (fenêtres)
    Par Haze. dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 12/05/2009, 15h45
  3. [C#]Obtenir la liste des fenêtres.
    Par pierre1256 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 05/06/2006, 20h29
  4. Réponses: 3
    Dernier message: 25/07/2005, 14h58
  5. Liste des fenêtres ouvertes de IE
    Par Trash dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/11/2003, 16h21

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