私は Ubuntu 14.04 を使用しており、c で仮想キーボードをセットアップしています。これには uinput が必要です。
私のプログラムは、キーボードの「a」キーを押すときと同じように、キー「a」を端末に送信することになっています。
ここに私のソースコードがあります:
int main()
{
int uinp_fd;
int i;
/********** Open uinput file section. **********************/
uinp_fd = open("/dev/uinput", O_WRONLY|O_NDELAY);
if(uinp_fd < 0)
{
printf("Unable to open /dev/uinput\n");
return -1;
}
else printf("Can open /dev/uinput\n");
/********* Setup input device structure section: ***********/
memset(&uinp,0,sizeof(uinp));
snprintf(uinp.name, UINPUT_MAX_NAME_SIZE, "The C Keyboard");
uinp.id.bustype = BUS_USB;
uinp.id.version = 1;
uinp.id.vendor = 0x1234;
uinp.id.product = 0xfedc;
write(uinp_fd, &uinp, sizeof(uinp));
/****** Setup the uinput keyboard device section: **********/
ioctl(uinp_fd, UI_SET_EVBIT, EV_KEY);
ioctl(uinp_fd, UI_SET_EVBIT, EV_SYN);
ioctl(uinp_fd, UI_SET_EVBIT, EV_REP);
ioctl(uinp_fd, UI_SET_KEYBIT, KEY_A);
if (ioctl(uinp_fd, UI_DEV_CREATE, NULL) < 0)
{
printf("Unable to create UINPUT device.\n");
return -1;
}
/*********** Send keypress events to kernel: ***************/
memset(&event, 0, sizeof(event));
gettimeofday(&event.time, NULL);
event.type = EV_KEY;
event.code = KEY_A;
event.value = 1;
write(uinp_fd, &event, sizeof(event));
event.type = EV_SYN;
event.code = SYN_REPORT;
event.value = 0;
write(uinp_fd, &event, sizeof(event));
/************** Release keypress event: *******************/
memset(&event, 0, sizeof(event));
gettimeofday(&event.time, NULL);
event.type = EV_KEY;
event.code = KEY_A;
event.value = 0;
write(uinp_fd, &event, sizeof(event));
event.type = EV_SYN;
event.code = SYN_REPORT;
event.value = 0;
write(uinp_fd, &event, sizeof(event));
/*** Destroy keyboard device and close the Uinput device: **/
ioctl(uinp_fd, UI_DEV_DESTROY);
close(uinp_fd);
return 0;
}
しかし、私のプログラムは何もしません。それは単に出力します:
Can open /dev/uinput
以上です...
私は何を間違っていますか?お手伝いありがとう!