数码资讯
linux输入子系统虚拟键盘和鼠标
1事件的装置 在{输入/输入/事件}中 数据的格式是: 结构input_event { 当前的时间结构; __u16型; __u16代码; __s32价值; }; 例如: XX XX XX XX是微秒 YY秒 TT型 cc是关键代码 VV是价值,可能是KEYUP或者KeyDown 对于鼠标事件,您可
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
1事件的装置
在{输入/输入/事件}中
数据的格式是:
结构input_event {
当前的时间结构;
__u16型;
__u16代码;
__s32价值;
};
例如:
XX XX XX
XX是微秒
YY秒
TT型
cc是关键代码
VV是价值,可能是KEYUP或者KeyDown
对于鼠标事件,您可以得到相同的消息格式。
XX,YY和键盘一样。
这是ev_rel,这意味着价值领域是相对的距离;
CC是rel_x或rel_y
VV是相对距离的值。
2登记input_dev
/ **************************
虚拟鼠标
**
静态变量vkm_vmouse_register(void)
{
结构input_dev * vmouse_dev;
vmouse_dev = input_allocate_device();
如果(!vmouse_dev)
返回enomem;
vmouse_dev ->名称=vmouse ;
vmouse_dev ->物理=xxmouse / input1 ;
vmouse_dev -> id.bustype = bus_host;
vmouse_dev -> id.vendor =端口;
vmouse_dev -> id.product = 0x0002;
vmouse_dev -> id.version = 0x0100;
vmouse_dev -> evbit { 0 } = bit_mask(ev_key)bit_mask(ev_rel)|;
vmouse_dev ->意大利键盘bit_word(btn_mouse)} = {
bit_mask(btn_left)bit_mask(btn_right)|;
vmouse_dev -> relbit { 0 } = bit_mask(rel_x)bit_mask(rel_y)|;
错误检查
误差= input_register_device(vmouse_dev);
如果(错误){
input_free_device(vmouse_dev);
返回错误;
}
}
/ **************************
虚拟键盘
**
静态变量vkm_vkbd_register(void)
{
i,错误;
结构input_dev * vkbd_dev;
vkbd_dev = input_allocate_device();
如果(!vkbd_dev)
返回enomem;
vkbd_dev ->名称=vkbd键盘;
vkbd_dev ->物理=atakbd / input0 ;
vkbd_dev -> id.bustype = bus_host;
vkbd_dev -> id.vendor =端口;
vkbd_dev -> id.product =端口;
vkbd_dev -> id.version = 0x0100;
vkbd_dev -> evbit { 0 } = bit_mask(ev_key)bit_mask(ev_rep)|;
vkbd_dev ->密码= atakbd_keycode;
vkbd_dev -> keycodesize = sizeof(char);
vkbd_dev -> keycodemax = array_size(atakbd_keycode);
为(i = 1;i < 0x72;i++){
set_bit(atakbd_keycode {我},vkbd_dev ->意大利键盘);
}
错误检查
误差= input_register_device(vkbd_dev);
如果(错误){
input_free_device(vkbd_dev);
返回错误;
}
返回0;
}
像这样发送键盘事件给输入处理程序:
input_report_key(vkbd_dev,key_a,0);
input_sync(vkbd_dev);
并将鼠标事件发送给输入处理程序,如下所示:
input_report_rel(vmouse_dev,rel_x,10);
input_report_rel(vmouse_dev,rel_y,10);
input_sync(vmouse_dev);
在{输入/输入/事件}中
数据的格式是:
结构input_event {
当前的时间结构;
__u16型;
__u16代码;
__s32价值;
};
例如:
XX XX XX
XX是微秒
YY秒
TT型
cc是关键代码
VV是价值,可能是KEYUP或者KeyDown
对于鼠标事件,您可以得到相同的消息格式。
XX,YY和键盘一样。
这是ev_rel,这意味着价值领域是相对的距离;
CC是rel_x或rel_y
VV是相对距离的值。
2登记input_dev
/ **************************
虚拟鼠标
**
静态变量vkm_vmouse_register(void)
{
结构input_dev * vmouse_dev;
vmouse_dev = input_allocate_device();
如果(!vmouse_dev)
返回enomem;
vmouse_dev ->名称=vmouse ;
vmouse_dev ->物理=xxmouse / input1 ;
vmouse_dev -> id.bustype = bus_host;
vmouse_dev -> id.vendor =端口;
vmouse_dev -> id.product = 0x0002;
vmouse_dev -> id.version = 0x0100;
vmouse_dev -> evbit { 0 } = bit_mask(ev_key)bit_mask(ev_rel)|;
vmouse_dev ->意大利键盘bit_word(btn_mouse)} = {
bit_mask(btn_left)bit_mask(btn_right)|;
vmouse_dev -> relbit { 0 } = bit_mask(rel_x)bit_mask(rel_y)|;
错误检查
误差= input_register_device(vmouse_dev);
如果(错误){
input_free_device(vmouse_dev);
返回错误;
}
}
/ **************************
虚拟键盘
**
静态变量vkm_vkbd_register(void)
{
i,错误;
结构input_dev * vkbd_dev;
vkbd_dev = input_allocate_device();
如果(!vkbd_dev)
返回enomem;
vkbd_dev ->名称=vkbd键盘;
vkbd_dev ->物理=atakbd / input0 ;
vkbd_dev -> id.bustype = bus_host;
vkbd_dev -> id.vendor =端口;
vkbd_dev -> id.product =端口;
vkbd_dev -> id.version = 0x0100;
vkbd_dev -> evbit { 0 } = bit_mask(ev_key)bit_mask(ev_rep)|;
vkbd_dev ->密码= atakbd_keycode;
vkbd_dev -> keycodesize = sizeof(char);
vkbd_dev -> keycodemax = array_size(atakbd_keycode);
为(i = 1;i < 0x72;i++){
set_bit(atakbd_keycode {我},vkbd_dev ->意大利键盘);
}
错误检查
误差= input_register_device(vkbd_dev);
如果(错误){
input_free_device(vkbd_dev);
返回错误;
}
返回0;
}
像这样发送键盘事件给输入处理程序:
input_report_key(vkbd_dev,key_a,0);
input_sync(vkbd_dev);
并将鼠标事件发送给输入处理程序,如下所示:
input_report_rel(vmouse_dev,rel_x,10);
input_report_rel(vmouse_dev,rel_y,10);
input_sync(vmouse_dev);
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。