Autore Topic: C - Intercettare i dati degli eventi dal file-device del mouse  (Letto 658 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Con questo breve codice, che ho scritto in linguaggio C, è possibile interecettare i dati numerici provenienti dal file-device del mouse, quando vengono sollevati eventi con il mouse medesimo (spostamenti, clic, azione sulla rotellina).

Poiché il file device "/dev/input/mouse0" del mouse è protetto, è necessario eliminare tale protezione con:
~ $ sudo chmod 666 /dev/input/mouse0

Per un esempio analogo in Gambas puro vedere questa pagina della WIKI:
http://www.gambas-it.org/wiki/index.php?title=Intercettare_i_dati_del_mouse_dal_suo_file-device

Il seguente codice va compilato in Terminale come segue:
~ $ gcc -o /percorso/del/codice /percorso/del/codice.c

Codice: [Seleziona]
#include<stdio.h>
#include <stdlib.h>
#include <poll.h>
#include <fcntl.h>


int main() {

    struct pollfd fds[1];
    int msecs = 10;
    char *buf;

   buf = malloc(sizeof(char)* 8);

   while (1) {
    /* Apre il file-device del mouse */
    fds[0].fd = open("/dev/input/mouse0", O_RDONLY);
    fds[0].events = POLLIN;
 
        poll(fds, 1, msecs);

read(fds[0].fd, buf, 8);
printf("%d = ", *((int*) buf));
if ( ((*((int*) buf)) < 30000) &&   ((*((int*) buf)) > 16)  ) {
printf("Spostamento a destra !");
}
if ( ((*((int*) buf)) < 65320) &&   ((*((int*) buf)) > 31000)  ) {
printf("Spostamento a sinistra !");
}
if ( ((*((int*) buf)) < 5000000) &&   ((*((int*) buf)) > 65400)  ) {
printf("Spostamento in alto !");
}
if ( *((int*) buf) > 10000000 ) {
printf("Spostamento in basso !");
}
if ( *((int*) buf) == 8 ) {
printf("Ruotata la rotellina !");
}
if ( *((int*) buf) == 9 ) {
printf("Clic sul tasto sinistro !");
}
if ( *((int*) buf) == 10 ) {
printf("Clic sul tasto destro !");
}
if ( *((int*) buf) == 11 ) {
printf("Clic contemporaneo sul tasto sinistro e sul tasto destro !");
}
if ( *((int*) buf) == 12 ) {
printf("Clic sulla rotellina !");
}
if ( *((int*) buf) == 13 ) {
printf("Clic contemporaneo sul tasto sinistro e sulla rotellina !");
}
if ( *((int*) buf) == 14 ) {
printf("Clic contemporaneo sulla rotellina e sul tasto destro !");
}
printf("\n");

close(fds[0].fd);
    }

    return 0;

}
« Ultima modifica: 17 Febbraio 2018, 16:41:39 da Gianluigi »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »