2012-03-19 20 views
5

, klavye için olay cihazını bulmak? Ben denedim nefare donanım <strong>klavyesi</strong> veya <strong>fare</strong> için <strong>olay aygıt düğümü</strong> bulmak için bir <strong>şaşmaz</strong> yöntemi nedir

/proc/bus/giriş/cihazları okumak ve 'Fare' cihaz adına veya 'Klavye' aramak içindir, ancak bu gibi her zaman işe yaramaz cihaz adları çok değişiyor.

Diğer seçenek Yükleyici = kbd ve Yükleyici = mouseX olanları seçmek için, ama bir dizüstü bilgisayarda, Yükleyici = kbd ile 'Güç düğmesi' 'Video otobüs' gibi diğer cihazlar olduğu çok.

cevap

0

Tüm giriş aygıtları dev->class alanda &input_class değerine sahiptir. Yani tüm cihazlar üzerinden yineleme ve (dev->class == &input_class) kontrol edebilirsiniz. Daha sonra, bulduk her giriş cihazı için bunun geçerli klavye/fare cihaz adı olup olmadığını görmek gerekir (ex. "Fareler", "fare% d", vs).

+0

grubuna ekleyin. fareyi, fareyi veya klavyeyi mutlaka içermez! – vikraman

0

Bu klavye olayı bulmak için örnektir:

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; 
} 

See: this ve daha fazla ayrıntı için this. Ayrıca, aygıtta open() yaparken hata 13 (İzin reddedildi) hatası alıyorsanız, bunun için 'input' grubunun tanımlı olup olmadığını kontrol edin ve kullanıcınızı

İlgili konular