如何在Linux中控制鼠标移动?

雷击技巧:

我尝试在Linux中控制鼠标。Xlib似乎可以工作,但是当我尝试将其与OpenCV一起使用时,它会不断返回:

Resource temporarily unavailable

所以我决定写“ / dev / psaux”。代码如下:

#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int main() {
    unsigned char a[5]={0, 0xff, 0, 0x28, 0xff};
    int fp = open ("/dev/psaux", O_WRONLY);
    if(!fp)printf("open error:%s\n", strerror(errno));
    for(int i = 0; i < 10; i++)
        printf("write:%d\t\t%s\n", write(fp, a, 5), strerror(errno));
    close(fp);
    return 0;
}

编译:

gcc  my_psaux.c -o my_psaux -std=gnu99 -g

运行并获得

$sudo ./my_psaux 
write:5    Success
write:5    Success
write:5    Success
write:5    Success
write:5    Success
write:5    Success
write:5    Success
write:5    Success
write:5    Success
write:5    Success

但是,鼠标不会移动。然后,我打开一个新终端,输入“ sudo cat / dev / psaux”并运行“ my_psaux”。但是我什么都没有。什么都没有写到“ / dev / psaux”中?

有人可以帮我吗?

如果这不是控制鼠标的好方法,有人可以告诉我另一个吗?

雷击技巧:

非常感谢@R ..提醒我一些其他方式,而不是/dev/psaux

于是,我就/dev/input/mouse*/dev/input/event*

通过使用

cat /proc/bus/input/devices 

我得到这个:

I: Bus=0003 Vendor=0461 Product=4d81 Version=0111
N: Name="USB Optical Mouse"
P: Phys=usb-0000:00:1d.0-1/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0/input/input10
U: Uniq=
H: Handlers=mouse2 event10 
B: EV=17
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=143
B: MSC=10

经过测试,仅/dev/input/event10适用。代码如下:

#include <stdio.h>
#include <unistd.h>
#include <linux/input.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>

int main() {
  struct input_event event, event_end;

  int fd = open("/dev/input/event10", O_RDWR);
  if (fd < 0) {
    printf("Errro open mouse:%s\n", strerror(errno));
    return -1;
  }
  memset(&event, 0, sizeof(event));
  memset(&event, 0, sizeof(event_end));
  gettimeofday(&event.time, NULL);
  event.type = EV_REL;
  event.code = REL_X;
  event.value = 100;
  gettimeofday(&event_end.time, NULL);
  event_end.type = EV_SYN;
  event_end.code = SYN_REPORT;
  event_end.value = 0;
  for (int i=0; i<5; i++) {
    write(fd, &event, sizeof(event));// Move the mouse
    write(fd, &event_end, sizeof(event_end));// Show move
    sleep(1);// wait
  }
  close(fd);
  return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 matplotlib 中控制鼠标可拖动点的点移动方向

在Linux中相对移动鼠标

如何在Linux中配置鼠标?

如何在opencv python中捕获整个窗口的鼠标移动?

如何在React中检测全局鼠标移动

如何在AS3中稍微移动鼠标?

如何在Ubuntu 16.04中提高鼠标移动速度

如何阻止控制器移动鼠标?

如何在Matplotlib中控制鼠标悬停文本

Linux,如何捕获屏幕并模拟鼠标移动

如何在18.04中移动窗口控制按钮

如何在C ++中用鼠标移动对象?

如何在 tkinter 上跟踪鼠标移动

如何在启用鼠标按钮的同时禁用鼠标移动输入?

如何在Linux中读取低级鼠标单击位置。

如何停止我的控制器移动(鼠标)指针?

如何在DataGridViewRow中捕获鼠标,使其仅在行内移动

如何在pygame中制作一个可以自动移动到鼠标位置的矩形?

如何在Typescript Angular中获取鼠标移动上xy坐标的十进制值?

如何在TextBox中通过鼠标单击禁用选定的文本移动?

如何在java桌面应用程序中停止无限循环以移动鼠标

如何在Ubuntu / Linux Mint中挂载无法移动的磁盘

鼠标移动时的空闲事件 - 如何在鼠标移动时永久停止脚本

如何在控制台应用程序中启用鼠标滚动

会话负责人如何在Linux中控制tty?

如何在Linux中对共享库进行版本控制?

如何在Linux Shell中重新控制单独的进程?

如何在 Linux 中控制计算机 RGB LED

Delphi,如何在鼠标移动时显示覆盖的控件