2012-03-19 15 views
5

एक सरल हार्डवेयर कुंजीपटल या माउस के लिए घटना डिवाइस नोड लगाने के लिए विधि क्या है?कीबोर्ड के लिए घटना डिवाइस का पता लगाएं, माउस

मैं क्या कोशिश की है/proc/बस/इनपुट/उपकरणों पढ़ सकते हैं और 'कीबोर्ड' 'माउस' उपकरण का नाम लिए या खोज करने के लिए है, लेकिन यह हमेशा काम नहीं करता, के रूप में डिवाइस के नाम बहुत भिन्न होते हैं।

अन्य विकल्प हैंडलर = kbd और हैंडलर = mouseX साथ लोगों को चुनने के लिए था, लेकिन एक लैपटॉप पर, वहाँ हैंडलर = kbd साथ 'पावर बटन', 'वीडियो बस' जैसे अन्य उपकरणों रहे हैं भी।

उत्तर

0

सभी इनपुट उपकरणों में dev->class फ़ील्ड में मान है। तो आप सभी उपकरणों पर पुन: प्रयास कर सकते हैं और (dev->class == &input_class) की जांच कर सकते हैं। इसके बाद, आपके द्वारा प्राप्त प्रत्येक इनपुट डिवाइस के लिए आपको यह देखने की आवश्यकता होगी कि उसके पास वैध कीबोर्ड/माउस डिवाइस का नाम है (पूर्व "चूहों", "माउस% d", आदि के लिए)।

+0

डिवाइस नामों में बहुत भिन्नता है, और माउस, चूहों या कीबोर्ड शब्द जरूरी नहीं है! – vikraman

0

यह उदाहरण कुंजीपटल घटना को मिल रहा है:

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

देखें: this और अधिक जानकारी के लिए this। इसके अलावा, यदि आपको डिवाइस पर खुले() को त्रुटि() अस्वीकार कर दिया गया है) त्रुटि है, तो जांचें कि इसके लिए समूह 'इनपुट' परिभाषित किया गया है और अपने उपयोगकर्ता को समूह

संबंधित मुद्दे