2013-01-12 6 views
8

मैं एक ऐप बनाना चाहता हूं जो उपयोगकर्ता को अपनी स्क्रीन को छूने पर स्वयं दिखाता है। यह क्लिक के लिए काम नहीं करना चाहिए। मैंने विंडोज 7/8 में टच हैंडलर्स की तलाश की। लेकिन मैंने देखा है कि हर स्पर्श खिड़की RegisterTouchWindowमाउस क्लिक करने के बजाए दुनिया भर में टैपिंग (स्पर्श इनपुट) का पता लगाने के लिए कैसे?

टी एल के साथ पंजीकृत होना चाहिए, डॉ

वहाँ एक रास्ता अपनी खिड़की (विश्व स्तर पर) के बाहर स्पर्श बिंदुओं स्थिति प्राप्त करने के लिए है?

उत्तर

9

WinT ऐप्स के लिए रजिस्टर टचविंडो आवश्यक नहीं है।

जहां तक ​​मुझे पता है, कुछ सीमाओं के साथ आपके उद्देश्य को प्राप्त करने के कई तरीके हैं।

  1. This article here पर काम करता है दोनों 7 विन & 8. लेकिन विक्रेता ID और टचस्क्रीन की उत्पाद ID की आवश्यकता है। एक संभावना है कि आपका एप्लिकेशन कुछ स्पर्श डिवाइस के साथ ठीक से काम नहीं करेगा।

  2. विन 8 पर RegisterPointerInputTarget का उपयोग करें। मेरी डीबगिंग से, विंडोज 8 टच मैकेनिज्म में इसकी अनूठी विशेषताएं हैं। टच डाउन और टच अप के बीच, सभी टच इवेंट विंडो पर भेजे जाएंगे जो पहली टच इवेंट प्राप्त करता है, इससे कोई फर्क नहीं पड़ता कि खिड़की कम हो गई है या दूसरी विंडो द्वारा कवर किया गया है या बाद की अवधि में WS_EX_TRANSPARENT विशेषता सेट करें। एक दबाकर और रिलीज़ करने के बीच स्पर्श घटनाओं को केवल एक और विंडो में साझा किया जा सकता है यदि पहला व्यक्ति नष्ट हो जाता है। इस एपीआई का उपयोग करके, सभी टच इवेंट पंजीकृत विंडो में भेजे जाएंगे। UnregisterPointerInputTarget पंजीकृत विंडो द्वारा अन्य विंडो को स्पर्श घटनाओं को तब तक प्राप्त नहीं किया जा सकता है, या टच इनपुट को InjectTouchInput का उपयोग कर सिस्टम में वापस इंजेक्शन दिया जाता है। "पंजीकृत इनपुट लक्ष्य से इंजेक्शन इनपुट अवरुद्ध नहीं किया जाएगा।" कृपया ध्यान दें कि इस एपीआई का उपयोग करने के लिए यूआई एक्सेस विशेषाधिकार की आवश्यकता है। एक नमूना here में पाया जा सकता है।

  3. विंडोज हुक। Win 7/8 पर डेस्कटॉप ऐप के लिए, WH_CALLWNDPROC या WH_GETMESSAGE के साथ SetWindowsHookEx का उपयोग करके ईवेंट को आसानी से लगाया जा सकता है। विन 8 पर मेट्रो ऐप के लिए, विंडो के संदेश लूप में केवल पहला पॉइंटर ईवेंट पता लगाया जा सकता है। यद्यपि एक पॉइंटर ईवेंट या तो एक क्लिक या टैप द्वारा किया जा सकता है, GetPointerType आपको बता सकता है कि यह एक स्पर्श सूचक या माउस पॉइंटर है या नहीं। हुक का उपयोग करने के लिए नमूने here पर पाए जा सकते हैं।

सूचक घटनाओं से निपटने के लिए एक कोड का टुकड़ा:

switch(Msg) 
{ 
... 
case WM_POINTERENTER: 
case WM_NCPOINTERDOWN: 
case WM_NCPOINTERUP: 
case WM_NCPOINTERUPDATE: 
case WM_POINTERACTIVATE: 
case WM_POINTERCAPTURECHANGED: 
case WM_POINTERDOWN: 
case WM_POINTERLEAVE: 
case WM_POINTERUP: 
case WM_POINTERUPDATE: 
    { 
     UINT32 pointerId = GET_POINTERID_WPARAM(wParam); 
     POINTER_INPUT_TYPE pointerType; 

     if (GetPointerType(pointerId, &pointerType)) 
     { 
      if (pointerType == PT_TOUCH) 
      { 
       ... 
      } 
     } 
    } 
    break; 
... 
+0

मदद के लिए धन्यवाद। क्या आपके ऊपर उपरोक्त कोई उदाहरण हैं? – blez

+0

मैंने विंडोज हुक का उपयोग करने के लिए एक लिंक और एक कोड स्निपेट जोड़ा। मुझे यकीन नहीं है कि ये उदाहरण हैं जिनकी आपको आवश्यकता है। Windows12 पर विंडो हुक समाधान के लिए – Luke

+0

FYI, WH_CALLWNDPROC और WH_GETMESSAGE हुक दोनों के लिए, वे अन्य प्रक्रिया में चलते हैं, इसलिए मानक त्रुटि और मानक आउटपुट अपेक्षा के अनुसार दिखाई नहीं देता है। इसके बजाय एक फ़ाइल बनाएँ और फ़ाइल में लॉग इन करें। और किसी को भी विंडोज 7 पर WM_INPUT या WM_TOUCH नहीं मिल रहा है। अभी मेरे पास कच्चे इनपुट केवल बाइनरी के रूप में काम कर रहा है, हां स्पर्श उपयोग में है या कोई स्पर्श उपयोग में नहीं है, जो हार्डवेयर माउस सक्रिय होने पर ठीक से काम करता है या नहीं। पोस्ट के लिए धन्यवाद। – phyatt

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