Forum Programmation.python Etat du clavier et de la souris

Posté par  (site web personnel) .
Étiquettes : aucune
0
13
juil.
2004
Comment récupérer l'état du clavier (la touche "r" est enfoncée, le alt gauche et p sont enfoncés) et de la souris (le bouton 1 est enfoncé, la souris est déplacé sur la gauche).

J'ai fait des cat dans un terminal et des open en python sur /dev/tty0 (c'est l'écran ou le clavier ?) et /dev/input/mouse0. Sur tt0, c'est une catastrophe :) Sur mouse0, je comprends rien mais on voit bien une "logique" dans les signes cabalistiques qui apparaisssent (je me doute qu'il doit y avoir une certaine logique ;p).

Apparement il faut récupérer un structure de flag pour le clavier, pour la souris j'ai pas compris mais je vois bien des changements d'état au mousedown et au mouseup.

Pour le clavier je n'arrive qu'à intercepter quand le terminal à le focus, pour la souris, ça marche tout le temps.

Des idées ?
  • # Pour quoi faire?

    Posté par  . Évalué à 1.

    Bonjour.

    Quel est le but de la manoeuvre?

    Ne serait-il pas plus simple d'utiliser un toolkit graphique (wxpython ou TkInter)?

    Sinon, peut-être que <a href=http://panda.cs.ndsu.nodak.edu/~achapwes/PICmicro/mouse/mouse.html&(...) ceci pourrait t'intéresser et correspondre à ce que tu récupère sur /dev/input/mouse0
    • [^] # Re: Pour quoi faire?

      Posté par  . Évalué à 1.

    • [^] # Re: Pour quoi faire?

      Posté par  (site web personnel) . Évalué à 2.

      C'est la suite de http://linuxfr.org/forums/29/2410.html(...)
      Le but final est de piloter un traitement de texte avec un clavier virtuel
      • [^] # Re: Pour quoi faire?

        Posté par  . Évalué à 1.

        Euh ... Je ne suis pas sûr que tu emploies la bonne méthode ...
        En fait j'ai un peu de mal à comprendre ce que tu veux faire, et comment tu veux le faire.
      • [^] # Re: Pour quoi faire?

        Posté par  . Évalué à 1.

        J'ai trouvé ca sur sourceforge:
        http://sourceforge.net/projects/watch/(...)

        Peut-être que ça pourait t'aider.

        Peux-tu quand même préciser ce que tu veux faire?
        • [^] # Re: Pour quoi faire?

          Posté par  (site web personnel) . Évalué à 2.

          Le logiciel surveille combien de temps tu es resté appuyé sur tel touche ou depuis combien de temps la souris bouge : ça donne une lettre !
          Mais j'aimerai que ça ne dépende pas d'un GUI particulier d'ou ma recherche du coté de /dev
        • [^] # Re: Pour quoi faire?

          Posté par  (site web personnel) . Évalué à 2.

          Ben, j'ai pas de keyboard ou de mouse ... or c'est ce qu'il utilise dans check_linux_interrupts (watch.py)
          Noyau 2.6 ?

          [rangzen@libre rangzen]$ cat /proc/interrupts
          CPU0
          0: 3754392 XT-PIC timer
          1: 2398 XT-PIC i8042
          2: 0 XT-PIC cascade
          5: 1374356 XT-PIC bttv0
          8: 1 XT-PIC rtc
          9: 259 XT-PIC EMU10K1
          10: 318173 XT-PIC uhci_hcd, uhci_hcd, nvidia
          11: 3954 XT-PIC acpi, eth0
          12: 69370 XT-PIC i8042
          14: 11524 XT-PIC ide0
          15: 32104 XT-PIC ide1
          NMI: 0
          LOC: 3754314
          ERR: 7095
          MIS: 0
          [rangzen@libre rangzen]$ cat /proc/ioports
          0000-001f : dma1
          0020-0021 : pic1
          0040-005f : timer
          0060-006f : keyboard
          0070-0077 : rtc
          0080-008f : dma page reg
          00a0-00a1 : pic2
          00c0-00df : dma2
          00f0-00ff : fpu
          0170-0177 : ide1
          01f0-01f7 : ide0
          02f8-02ff : serial
          0376-0376 : ide1
          0378-037a : parport0
          037b-037f : parport0
          03c0-03df : vesafb
          03f6-03f6 : ide0
          03f8-03ff : serial
          0cf8-0cff : PCI conf1
          5000-500f : 0000:00:07.4
          6000-607f : 0000:00:07.4
          c000-c00f : 0000:00:07.1
          c000-c007 : ide0
          c008-c00f : ide1
          c400-c41f : 0000:00:07.2
          c400-c41f : uhci_hcd
          c800-c81f : 0000:00:07.3
          c800-c81f : uhci_hcd
          cc00-ccff : 0000:00:07.5
          d000-d003 : 0000:00:07.5
          d400-d403 : 0000:00:07.5
          dc00-dc1f : 0000:00:09.0
          dc00-dc1f : EMU10K1
          e000-e007 : 0000:00:09.1
          e400-e4ff : 0000:00:0e.0
          e400-e4ff : eth0
          • [^] # Commentaire supprimé

            Posté par  . Évalué à 2.

            Ce commentaire a été supprimé par l’équipe de modération.

            • [^] # Re: Pour quoi faire?

              Posté par  (site web personnel) . Évalué à 2.

              marche qu'avec une seule fenêtre :(
              • [^] # Re: Pour quoi faire?

                Posté par  . Évalué à 1.

                Je te précise que je n'ai pas testé le soft.
                J'ai juste vu quelque choser qui a l'air de correspondre de loin à ce que tu veux.

                Peux-tu nous en dire plus sur ce que tu veux faire ?
                • [^] # Re: Pour quoi faire?

                  Posté par  (site web personnel) . Évalué à 3.

                  Tu lances le logiciel, tu choisis une source (clavier, carte son, souris, camera, etc.) chaque source à un module qui détermine 1 (touche appuyée, objet en mouvement, niveau sonore supèrieur à un seuil) ou 0 (pas de mouvement de la souris, image fixe, pas de son, etc.).
                  Je suis pas encore sur de la manière de receuillir les changements d'état, est ce que je vais vérifier toutes les x ms l'état de l'objet ou est ce que l'objet me préviens à chaque changement d'état ...
                  Le but final est un logiciel d'aide aux personnes handicapées qui permet de piloter un logiciel avec une commande limitée.
                  Je suis en train de tester tout les "bouts" de l'application et d'imaginer les structures internes.
                  Le logiciel s'appellera PyLisiere et sera sous GPL
                  • [^] # Re: Pour quoi faire?

                    Posté par  . Évalué à 1.

                    Si j'ai bien compris, ca fonctionne sous X. Ne serait-il pas plus simple, plutôt que d'attaquer directement les /dev/ttyXXX et /dev/mouse, de 'capturer' les evenements au niveau du serveur X?

                    J'ai vu (vite fait) ceci:
                    http://www.pypackage.org/packages/python-xlib/package_view(...)

                    Il faudrait que je me replonge dans la xlib pour voir s'il est possible d'intercepter tous les evenements clavier/souris qui arrivent sur le serveur (Y a-t-il qqn qui peut nous renseigner dans la salle?).
                  • [^] # Re: Pour quoi faire?

                    Posté par  . Évalué à 1.

                    Pour les evenemnts sous X:
                    http://www-igm.univ-mlv.fr/~berstel/Cours/Xlib/13-Evenements.pdf(...)

                    Il y a peut-être moyen de récupérer les infos en fonction du Window Manager (voir la doc de ton WM préféré, et s'il existe un module Python te permettant d'y accéder).
                    Je suis pas encore sur de la manière de receuillir les changements d'état, est ce que je vais vérifier toutes les x ms l'état de l'objet ou est ce que l'objet me préviens à chaque changement d'état ...

                    une idée:
                    créer un objet pour chaque module (thread) de saisie. Relier chaque module à ton thread principal par une queue de messages commune. Le module principal (s'il n'a rien d'autre à faire) attend en permanence qu'un message arrive sur cette queue et exécute les actions correspondantes (que tu auras répertorié dans une table d'actions a effectuer en fonction de ton message).

                    Est-ce qu'il existe un site pour ton projet avec les sources en ligne?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.