2012-03-19 37 views
5

một cao độ phương pháp để tìm kiện thiết bị nút cho phần cứng bàn phím hoặc chuột là gì?Tìm thiết bị sự kiện cho bàn phím, chuột

Những gì tôi đã cố gắng là để đọc /proc/bus/input/thiết bị và tìm kiếm 'Keyboard' hoặc 'Chuột' trong tên thiết bị, nhưng điều này không làm việc luôn, như tên thiết bị thay đổi rất nhiều.

Các tùy chọn khác là để chọn những người thân với Handlers = kbdHandlers = mouseX, nhưng trên một máy tính xách tay, có những thiết bị khác như 'nút Power', 'xe buýt Video' với Handlers = kbd quá.

Trả lời

0

Tất cả thiết bị đầu vào có giá trị &input_class trong trường dev->class. Vì vậy, bạn có thể lặp qua tất cả các thiết bị và kiểm tra (dev->class == &input_class). Tiếp theo, đối với mỗi thiết bị đầu vào bạn đã tìm thấy, bạn sẽ cần phải xem nó có tên thiết bị bàn phím/chuột hợp lệ không (ví dụ: "chuột", "chuột% d", v.v.).

+0

Tên thiết bị thay đổi rất nhiều, và không nhất thiết phải chứa từ chuột, chuột hoặc bàn phím! – vikraman

0

Đây là ví dụ để thấy sự kiện bàn phím:

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

Xem: thisthis để biết thêm chi tiết. Ngoài ra, nếu bạn gặp lỗi 13 (Quyền bị từ chối) khi thực hiện mở() trên thiết bị, hãy kiểm tra xem nhóm 'đầu vào' được xác định cho nó hay không và thêm người dùng vào nhóm

Các vấn đề liên quan