How do you read the mouse button state from /dev/input/mice?

前端 未结 1 733
你的背包
你的背包 2020-12-05 09:15

How do you read the mouse button state from /dev/input/mice? I want to detect if the button is pressed down.

相关标签:
1条回答
  • 2020-12-05 09:36

    You can open the device and read from it. Events from /dev/input/mice are 3 bytes long and require some parsing. I think the prefered method now is to use /dev/input/event# instead. However, here is a small example using /dev/input/mice.

    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    
    int main(int argc, char** argv)
    {
        int fd, bytes;
        unsigned char data[3];
    
        const char *pDevice = "/dev/input/mice";
    
        // Open Mouse
        fd = open(pDevice, O_RDWR);
        if(fd == -1)
        {
            printf("ERROR Opening %s\n", pDevice);
            return -1;
        }
    
        int left, middle, right;
        signed char x, y;
        while(1)
        {
            // Read Mouse     
            bytes = read(fd, data, sizeof(data));
    
            if(bytes > 0)
            {
                left = data[0] & 0x1;
                right = data[0] & 0x2;
                middle = data[0] & 0x4;
    
                x = data[1];
                y = data[2];
                printf("x=%d, y=%d, left=%d, middle=%d, right=%d\n", x, y, left, middle, right);
            }   
        }
        return 0; 
    }
    

    One mouse click generates this:

    x=0, y=0, left=1, middle=0, right=0
    x=0, y=0, left=0, middle=0, right=0
    

    And one mouse move (Note the "relative" mouse move coordinates):

    x=1, y=1, left=0, middle=0, right=0
    
    0 讨论(0)
提交回复
热议问题