本文代码可以自动抓取到键盘属于哪个event,不需要人工进行代码修改
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/input.h>
#include <linux/uinput.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>
void simulate_key(int fd,int kval)
{
struct input_event event;
event.type = EV_KEY;
event.value = 1;
event.code = kval;
gettimeofday(&event.time,0);
write(fd,&event,sizeof(event)) ;
event.type = EV_SYN;
event.code = SYN_REPORT;
event.value = 0;
write(fd, &event, sizeof(event));
memset(&event, 0, sizeof(event));
gettimeofday(&event.time, NULL);
event.type = EV_KEY;
event.code = kval;
event.value = 0;
write(fd, &event, sizeof(event));
event.type = EV_SYN;
event.code = SYN_REPORT;
event.value = 0;
write(fd, &event, sizeof(event));
}
/*
void simulate_mouse(int fd)
{
struct input_event event;
memset(&event, 0, sizeof(event));
gettimeofday(&event.time, NULL);
event.type = EV_REL;
event.code = REL_X;
event.value = 10;
write(fd, &event, sizeof(event));
event.type = EV_REL;
event.code = REL_Y;
event.value = 10;
write(fd, &event, sizeof(event));
event.type = EV_SYN;
event.code = SYN_REPORT;
event.value = 0;
write(fd, &event, sizeof(event));
}
*/
int main()
{
int fd_kbd;
char a1[] = {
'/','d','e','v','/','i','n','p','u','t','/'};
FILE *fp;
char buf[1024]={
0};
char buf1[1024]={
0};
//get keyboad devices
fp = popen("cat /proc/bus/input/devices | grep -i -A 5 'keyboard' | grep -o event..","r");
if(NULL != fp)
{
while (fgets(buf,sizeof(buf),fp) != NULL)
{
printf("%s\n",buf);
sprintf(buf1, "%.11s%.6s", a1, buf);
printf("%s\n",buf1);
fd_kbd = open(buf1,O_RDWR);
}
}
else
{
return 1;
}
pclose(fp);
if(fd_kbd<=0){
printf("error open keyboard:\n");
return -1;
}
int i = 0;
for(i=0; i< 10; i++)
{
simulate_key(fd_kbd, KEY_A + i);
sleep(1);
}
close(fd_kbd);
}