2008-09-24 15 views
5

सबसे पहले, हाँ मुझे this question पता है, लेकिन मैं थोड़ी अधिक जानकारी ढूंढ रहा हूं। मेरे पास वास्तव में, एक समान समस्या है, जिसमें मुझे माउस/कीबोर्ड/जॉयस्टिक के लिए इनपुट कैप्चर करने में सक्षम होना चाहिए, और यदि संभव हो तो मैं एसडीएल से बचना चाहूंगा। मैं कम या ज्यादा सोच रहा था कि अगर कोई जानता है कि मैं लिनक्स में उपकरणों से इनपुट को संभालने पर कुछ सभ्य प्राइमर्स कहां प्राप्त कर सकता हूं, शायद कुछ ट्यूटोरियल भी। एसडीएल क्रॉस-प्लेटफार्म इनपुट हैंडलिंग के लिए बहुत अच्छा काम करता है, लेकिन मैं एसडीएल से किसी और चीज का उपयोग नहीं कर रहा हूं, इसलिए मैं इसे पूरी तरह से काटना चाहता हूं। सुझाव, टिप्पणियां, और सहायता सभी की सराहना की जाती है। धन्यवाद! स्पष्टता के लिएलिनक्स में कैप्चरिंग इनपुट

संपादित करें:

बिंदु माउस गति, कीबोर्ड प्रेस/रिलीज, माउस क्लिक पर कब्जा, और संभवतः एक खेल के लिए से निपटने जॉयस्टिक है।

+0

मुझे लगता है कि यह प्रश्न बहुत व्यापक है। सीधे इनपुट डिवाइस से बात करें? (आमतौर पर एक उच्च स्तरीय आवेदन के लिए एक बुरा विचार।) एक्स का प्रयोग करें? (यदि एक्स, क्या आप Xlib, XCB, Gtk +, Qt, ...) कंसोल मोड में माउस के लिए जीपीएम चाहते हैं? – asveikau

उत्तर

5

समारोह में नज़र नीचे दिए गए लिंक का उपयोग करते हुए शून्य kGUISystemX :: लूप (शून्य)

यह लिनक्स पर एक्स Windows का उपयोग कीबोर्ड और माउस के माध्यम से इनपुट प्राप्त करने के लिए अपने मुख्य पाश है।

if(XPending(m_display)) 
    { 
     XNextEvent(m_display, &m_e); 
     switch(m_e.type) 
     { 
     case MotionNotify: 
      m_mousex=m_e.xmotion.x; 
      m_mousey=m_e.xmotion.y; 
     break; 
     case ButtonPress: 
      switch(m_e.xbutton.button) 
      { 
      case Button1: 
       m_mouseleft=true; 
      break; 
      case Button3: 
       m_mouseright=true; 
      break; 
      case Button4:/* middle mouse wheel moved */ 
       m_mousewheel=1; 
      break; 
      case Button5:/* middle mouse wheel moved */ 
       m_mousewheel=-1; 
      break; 
      } 
     break; 
     case ButtonRelease: 
      switch(m_e.xbutton.button) 
      { 
      case Button1: 
       m_mouseleft=false; 
      break; 
      case Button3: 
       m_mouseright=false; 
      break; 
      } 
     break; 
     case KeyPress: 
     { 
      XKeyEvent *ke; 
      int ks; 
      int key; 

      ke=&m_e.xkey; 
      kGUI::SetKeyShift((ke->state&ShiftMask)!=0); 
      kGUI::SetKeyControl((ke->state&ControlMask)!=0); 
      ks=XLookupKeysym(ke,(ke->state&ShiftMask)?1:0); 
...... 
1

अपने ऐप्लिकेशन के उद्देश्य को नहीं था लेकिन पढ़ने कच्चे डेटा से शुरू कर सकता है आप क्या चाहते हैं शायद ही कभी होता है जब तक कि आप सिर्फ मनोरंजन के लिए (या स्कूल परियोजना के लिए यह करना या जो कुछ भी)

यदि आप एक जीयूआई एप्लीकेशन लिख रहे हैं (एक जो एक्स 11 ग्राफिकल वातावरण में चलता है) तो आप ग्राफिकल टूलकिट (या कच्चे एक्स) इनपुट ड्राइवरों पर भरोसा कर सकते हैं।

यदि आप टेक्स्ट-मोड क्लाइंट लिख रहे हैं, तो शायद readline या यहां तक ​​कि ncurses अच्छे विकल्प हो सकते हैं।

2

यदि आपको पता है कि आपकी परियोजना केवल लिनक्स (विंडोज़ या यहां तक ​​कि बीएसडी में से एक नहीं) के तहत चलती है, तो आपको लिनक्स कर्नेल की इनपुट सिस्टम में देखना चाहिए। kernel source डाउनलोड करें और Documentation/input/input.txt पढ़ें, विशेष रूप से evdev सिस्टम का विवरण।

एक महत्वपूर्ण उच्च स्तरीय (और अधिक पोर्टेबल) समाधान के लिए, read up on Xlib। जाहिर है, इसे एक चल रहे एक्स सर्वर की आवश्यकता है, लेकिन इसका उपयोग उपयोगकर्ता की कीबोर्ड सेटिंग्स को विरासत में करने का लाभ है। जॉयस्टिक घटनाओं को दुर्भाग्य से शामिल नहीं किया गया है, आपको शायद उन लोगों के लिए कर्नेल जॉयस्टिक एपीआई का उपयोग करने की आवश्यकता होगी।

-1

आप/dev/इनपुट में फ़ाइलों से प्रत्यक्ष इनपुट प्राप्त कर सकते हैं:

http://code.google.com/p/kgui/source/browse/trunk/kguilinux.cpp

यहाँ एक टुकड़ा है। ऐसा करने का यह सबसे आसान तरीका है, और आपको किसी भी अतिरिक्त सॉफ्टवेयर की आवश्यकता नहीं है।

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