我试图通过android应用程序为linux服务器上的鼠标远程控制做一个应用程序。作为一个初学者,我有很多probs ..在用C编写linux服务器之前,我试着检查一下我是否可以根据代码在Linux上控制和移动鼠标:
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <linux/input.h>
int main(){
struct input_event event, event_end;
int i=0;
int fd = -1;
fd = open("/dev/input/event4", O_RDWR | O_NONBLOCK);
if(fd<0){
perror("error");
}
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( i=0; i<5; i++){
write(fd, &event, sizeof(event));// Move the mouse
write(fd, &event_end, sizeof(event_end));// Show move
sleep(1);
}
close(fd);
return 0;
}
构建编译后执行..没有任何反应 游标永远不会移动..它会成为VirtualBox设置问题的一部分吗?
当我物理移动鼠标时,sudo cat / dev / input / event4显示奇怪的符号串。 这意味着能够通过event4得到鼠标光标移动的控制因素吗? 我想知道为什么光标不会移动......任何人都可以帮忙吗?
而且,如果有人建议使用库和函数控制鼠标
,我会很高兴 很多答案 0 :(得分:2)
您不能只是写入设备文件并期望驱动程序的行为就像实际硬件发送这些事件一样。事情比这更复杂。
如果您只关心X Windows环境,那么您很幸运。您可以使用此功能将事件发送到窗口:
http://tronche.com/gui/x/xlib/event-handling/XSendEvent.html
如果您不知道哪个窗口应该接收您的事件,只需将它们发送到根窗口,它们将被适当地路由。
还有一个图书馆。
http://www.x.org/releases/X11R7.6/doc/libXtst/recordlib.html
请记住,在X windows中,事件有一个标志,指示事件是来自实际硬件还是由上述方法之一合成。在大多数情况下,程序只是忽略此标志并且无论如何都表现相同。但有时你会有奇怪的惊喜。