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

Linux Discussion :

Passer des event depuis le serveur X (ou autre) jusqu'à un demon


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Passer des event depuis le serveur X (ou autre) jusqu'à un demon
    Bonjour à tous,

    Je cherche à contrôler un démon sans console (ici, si les boutons droit et gauche de la souris sont pressés).

    Est-il possible de le faire (j'imagine que oui), et peut-on passer des paramètres à cet envoi (comme la position du curseur) ?

    Merci d'avance etc...

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Un méchant doute me vient : ne suffirait-il pas d'utiliser Xlib ?

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    absolument

    c'est la grosse différence en Windows et les autres systèmes. Sous Windows il faut automatiquement une fenêtre (la console en est une). Mais un démon sous *n*x n'a pas besoin d'une fenêtre : ce peut être un pur code sans graphisme, ou un code contenant du graphisme (par exemple avec X), mais sans fenêtre....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Vient alors la question : comment (et peut-on) demander tous les events du serveur, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XSelectInput (display, root,...)
    revoyant un sympathique (mais compréhensible) message d'erreur avec entre autres "attempt to access private ressources denied" ?

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    en faite le principe doit etre un peut different :
    sous X c'est la "root" windows par qui passe tout les evenements, donc c'est a celle ci que tu doit attaché ta gestion des events.
    "pose" un hook (genre xtAddevent) sur cette fenetre, bien evidement il te faut les droits associé (meme utilisateur ou etre root).
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Ouark la vilaine chose, une fonction Xt...

    Non pas que je me dispense des remerciements d'usages, ni dénigre cette API, mais force est de constater qu'il y a mieux documenté.

    N'y a-t-il pas un équivalent avec une autre librairie (Qt par exemple, ou directement Xlib), ou un tutoriel (un simple hello world+boucle evenementielle) avec Xt ?

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par patatosaure
    Ouark la vilaine chose, une fonction Xt...
    ?
    ????????????????????



    D'autre part, si c'est un démon sans console, pourquoi aurais tu besoin d'un outil graphique ?????????????????


    Expose plus calmement ton problème....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Tu as raison, reprenons.

    Je cherche à faire un pie menu global, qui apparaîtrait avec une combinaisons de touche de souris pressée (l'intérêt étant justement de ne pas avoir besoin de trop la bouger ou de toucher au clavier).

    Il me faut donc un event receiver (demon) qui fait apparaître le cercle.

    Hooker le serveur X semble donc possible avec Xt, mais cette bibliothèque est trop peu documentée à mon goût.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Il y a d'excellents bouquins simples sur Xt (voir la collection O'Reilly)

    En gros :

    Juste détecter et suivre les mouvements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       XtAddEventHandler ( MonWidget, 
    		       PointerMotionMask | ButtonMotionMask, False,
    		       (XtEventHandler) MonEventHandllet, (XtPointer)MonData);
    et la routine correspondante :

    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
     
    static void MonEventHandler ( Widget w, XtPointer *cdata,
    			  XEvent *sevent, Boolean *cont )
    {
       MonData           *mydata = (MonData *)cdata ;
       int                     rx, ry, x, y ;
       unsigned             int keys;
       Window               root, child;
       XMotionEvent      *m ;
     
       XQueryPointer ( XtDisplay(w), XtWindow(w),
    		&root, &child, &rx, &ry, &x, &y, &keys );
     
       ............
     
    }
    Mais si tu veux par exemple détecter les clics de la souris, ou le fait que une touche clavier soit pressée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
           XtAddCallback ( MonWidget, 
    		    XmNinputCallback,(XtCallbackProc) MonInputCB, (XtPointer)MonData);
           XtAddEventHandler ( MonWidget, 
    	                       KeyReleaseMask , False,
    		          (XtEventHandler) MonKeyboardEventHandler,  (XtPointer)MonData);
    Et par exemple les routines correspondantes :

    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
     
    static void MonInputCB ( Widget w, XtPointer *cdata,
    			   XmDrawingAreaCallbackStruct *call_data )
    {
       MonData            *idata = (MonData*)cdata ;
       XEvent                  *event=(XEvent *)NULL ;
       XButtonEvent            *sevent=(XButtonEvent *)NULL ;
     
       if ( call_data->event == (XEvent *)NULL ) return ;
     
     
       event = (XEvent *)call_data->event ;
     
       if ( (event->type != ButtonPress) &&
            (event->type != ButtonRelease) ) return ;
     
       sevent = (XButtonEvent *)call_data->event ;
     
       if ( sevent->type == ButtonPress )
         {
           if ( sevent->button == Button1 )
    	 {
                  }
           else
             {
             }
        }
       else
       if ( sevent->type == ButtonRelease )
         {
           if ( sevent->button == Button1 )
    	 {
                  }
           else
             {
             }
        }
    ......
    }
    et

    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
     
    static void MonKeyboardEventHandler ( Widget w, XtPointer *cdata,
    			     XEvent *sevent, Boolean *cont )
    {
       MonData *idata = (MonData*)cdata ;
       KeySym	 Symbol ;
       XKeyEvent    *Eve=(XKeyEvent *)NULL ;
       char          Chaine[5] ;
       int           n ;
     
    /*
    --- Translates the key event
    */
       Eve = (XKeyEvent *)sevent ;
     
    /*
    --- If it is the first time we are called, go and gets values for the arrow keys
    */
       if ( Left == -1 )
         {
            Left = XStringToKeysym ("Left");
            Right = XStringToKeysym ("Right");
            Up = XStringToKeysym ("Up");
            Down = XStringToKeysym ("Down");
            Alt = XStringToKeysym ("Alt");
         }
     
       memset ( Chaine, '\0', 5 ) ;
       XLookupString ( Eve, Chaine, 4, &Symbol, NULL );
     
       if ( (Symbol == Left) || (Symbol == Right) || 
    	(Symbol == Down) || (Symbol == Up) )
         {
         }
       else
        {
        }
     
    ......
    }
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Désolé pour le up et l'absence de réponse; j'étais absent et n'y pensais plus.

    ....Merci ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/04/2017, 19h01
  2. recuperation des données depuis le serveur
    Par isoman dans le forum JPA
    Réponses: 5
    Dernier message: 06/04/2009, 16h57
  3. Pousser des donnees depuis le serveur vers plusieurs clients avec WCF
    Par NoussaL dans le forum Windows Communication Foundation
    Réponses: 6
    Dernier message: 30/09/2008, 17h11
  4. Impossible de télécharger des fichiers depuis mon serveur
    Par amine55555 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 12/05/2007, 14h15
  5. passer des arguments depuis un lien hypertxte vers une page php
    Par killer_instinct dans le forum Langage
    Réponses: 5
    Dernier message: 28/04/2007, 12h18

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