首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找键盘、鼠标事件设备

查找键盘、鼠标事件设备
EN

Stack Overflow用户
提问于 2012-03-19 16:48:07
回答 2查看 3.9K关注 0票数 6

什么是万无一失的方法来查找硬件键盘鼠标事件设备节点

我尝试的是读取/proc/bus/input/设备,并在设备名称中搜索“键盘”或“鼠标”,但这并不总是有效的,因为设备名称差异很大。

另一种选择是选择带有Handlers=kbd和Handlers=mouseX的设备,但在笔记本电脑上,还有“电源按钮”、“视频总线”和Handlers=kbd等其他设备。

EN

回答 2

Stack Overflow用户

发布于 2012-03-20 18:54:27

所有输入设备的&input_class值都在dev->class字段中。因此,您可以遍历所有设备并检查是否为(dev->class == &input_class)。接下来,对于您找到的每个输入设备,您将需要查看它是否具有有效的键盘/鼠标设备名称(用于ex )。“老鼠”、“老鼠%d”等)。

票数 0
EN

Stack Overflow用户

发布于 2017-02-24 10:27:55

下面是查找键盘事件的示例:

代码语言:javascript
复制
const std::string get_dev_event_kbd()
{
    std::string sline, sdev="/dev/input/", sH="", sBEV="";
    std::ifstream ifs("/proc/bus/input/devices");
    auto trimstr=[](std::string &s)
    {
        int i=0, n=s.length(); //left
        while ((i<n)&&((s[i]==' ')||(s[i]=='\t'))) i++;
        s=(i>0)?s.substr(i):s;
        n=s.length()-1; i=n; //right
        while ((i>0)&&((s[i]==' ')||(s[i]=='\t')||(s[i]=='\n')||(s[i]=='\r'))) i--;
        s=(i<n)?s.substr(0,i+1):s;
    };

    while (std::getline(ifs,sline).good())
    {
        if (sline[0]=='H')
        {
            sH=sline.substr(sline.rfind(" event"));
            trimstr(sH);
        }
        if (sline.substr(0,5)=="B: EV")
        {
            sBEV=sline.substr(sline.find('=')+1);
            trimstr(sBEV);
        }
        if (sBEV=="120013") break;
    }
    sdev+=sH;
    return sdev;
}

有关详细信息,请参阅:thisthis。此外,如果在设备上执行open()时收到错误13 (权限拒绝)错误,请检查是否为其定义了组“输入”,并将用户添加到组中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9774260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档