2012-09-01 8 views
6

का उपयोग कर लिनक्स पर एक कीबोर्ड ईवेंट को कैसे कॉम्यूम करें, मैं सी में एक लिनक्स प्रोग्राम लिख रहा हूं, और मुझे कुछ कीबोर्ड स्ट्रोक को अवरुद्ध करने की आवश्यकता है।इनपुट सबसिस्टम

इनपुट सबसाइटम (पढ़ना/लिखना/dev/input/eventX) का उपयोग करके, मैं एक कीबोर्ड स्ट्रोक ("पढ़ने" फ़ंक्शंस का उपयोग करके) प्राप्त कर सकता हूं या कीबोर्ड स्ट्रोक ("लिखने" फ़ंक्शन का उपयोग करके) प्राप्त कर सकता हूं।

"पढ़ने" फ़ंक्शन का उपयोग करते समय, मैं उपयोगकर्ता कीबोर्ड स्ट्रोक को कैप्चर कर सकता हूं, लेकिन यह ईवेंट प्रचारित है और मुझे नहीं पता कि इसका उपभोग कैसे किया जाए।

+0

डेमो कोड: int devfd = open (device, ...);/* कर्नेल डिवाइस "/ dev/input/eventX" खोलें। */ पढ़ें (devfd, ...);/* एक कुंजीपटल घटना पढ़ें। */ लिखें (devfd, ...);/* एक कुंजीपटल घटना अनुकरण करें। */ – zccoding

+2

अपने स्वयं के प्रश्न टिप्पणी करने की कोई आवश्यकता नहीं है। आप कोई और विवरण शामिल करने के लिए प्रश्न संपादित कर सकते हैं, और स्रोत को प्रारूपित कर सकते हैं। सुनिश्चित करें कि आपका स्रोत उन लोगों के लिए स्पष्ट है जो उत्तर देंगे। – bytebuster

उत्तर

5

डिफ़ॉल्ट रूप से, इनपुट ईवेंट सभी सुनने वाले अनुप्रयोगों और ड्राइवरों को प्रेषित किया जाता है। हालांकि, यह संभव है कि एप्लिकेशन को evdev इंटरफ़ेस के माध्यम से डिवाइस को पकड़ें - EVIOCGRABioctl() पर एक नज़र डालें। इससे केवल उस विशिष्ट एप्लिकेशन को उस विशेष डिवाइस से ईवेंट प्राप्त करने की अनुमति मिल जाएगी। आपको प्रत्येक उपकरण पहले से प्राप्त कर सकते हैं, जो तब सभी घटनाओं पर कब्जा होगा -

कि दृष्टिकोण के साथ समस्या यह है कि आप वास्तव में प्रचारित किया जा रहा है प्राप्त होने के बाद से एक विशिष्ट घटना नहीं रोका जा सकता है। इसलिए, यदि आप फ़िल्टर इनपुट ईवेंट चाहते हैं तो आपको वर्कअराउंड का उपयोग करना होगा।

वैकल्पिक हल है कि मैं अपने ही evmapd डेमॉन में इस्तेमाल किया मूल उपकरण हथियाने और uinput सबसिस्टम का उपयोग करके सभी संशोधनों है कि मैं जरूरत है, पुनः मानचित्रित कुंजी और विभिन्न अन्य परिवर्तन सहित के साथ एक और डिवाइस प्रदान करने के लिए शामिल किया गया ...

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

  • कोई संबंधित समस्या नहीं^_^