क्या आपके पास WM के साथ एक संचारक है और इसके साथ एक पीसी को नियंत्रित करने की आवश्यकता है?
हो सकता है कि आप किसी प्रकार की मुश्किल प्रस्तुति बनाना चाहते हों जिसके लिए आपकी जेब में एक माउस होना चाहिए?

ठीक है, आपको एक कट चाहिए (चित्र हैं)।
यदि आप केवल अंतिम उत्पाद में रुचि रखते हैं, लेकिन तकनीकी विवरण में नहीं, तो मैं FAQ अनुभाग में जाने में देरी नहीं करने की सलाह देता हूं।
संकल्पना
कार्य: इसकी सहायता से किसी भी जीत-प्रणाली को नियंत्रित करने की क्षमता प्राप्त करते हुए, WM-कम्युनिकेटर को पूर्ण टचपैड और कीबोर्ड में बदल दें।
सामान्य तौर पर, प्रबंधित सिस्टम जीत नहीं सकता है, लेकिन उस पर अधिक।
हम परिवहन के रूप में वाई-फाई पर UDP / IP का उपयोग करेंगे, या (पारखी के लिए) ब्लूटूथ।
इसके लिए क्या आवश्यक है:
- डिवाइस के डिफ़ॉल्ट कीबोर्ड से इनपुट पर कब्जा;
- एक संचारक के टचस्क्रीन का उपयोग अनुकरण:
- स्क्रॉल और क्लिक के साथ नियमित टचपैड;
- माउस पहिया;
- माउस बटन (कर्सर को ड्रैगने के लिए क्लैम्पड क्लिक के साथ स्थानांतरित करने की क्षमता के साथ);
- एक प्रबंधित प्रणाली (सर्वर) पर एक एप्लिकेशन डिवाइस से कीबोर्ड और माउस स्ट्रीम पर प्राप्त डेटा को लिखने में सक्षम है;
- किसी प्रबंधित सिस्टम पर सर्वर के साथ क्लाइंट एप्लिकेशन के आदान-प्रदान के लिए एक प्रोटोकॉल।
आदेश में, ग्राहक पक्ष है
WM के लिए आवेदन
.NET कॉम्पैक्ट फ्रेमवर्क 3.5 के लिए
C # में लिखा,
WM 6.5 के साथ
HTC HD2 पर परीक्षण किया गया।
क्लाइंट एप्लिकेशन किसी भी विक्रेता-विशिष्ट एपीआई का उपयोग नहीं करता है, इसलिए इसे WM 5 और 6 के साथ सभी उपकरणों पर काम करना चाहिए।
कीबोर्ड और टच स्क्रीन इनपुट कैप्चर करने का सिद्धांत बेहद सरल है:
- हम किसी प्रकार का नियंत्रण बनाते हैं, और खिड़की को फिट करने के लिए इसे खींचते हैं (डॉक = भरण);
- हमने उस पर ध्यान केंद्रित किया;
- KeyDown, KeyUp, KeyPress घटनाओं की सदस्यता के लिए कीस्ट्रोक्स को रोकना;
- माउसपैड, माउसअप, माउसपैड टचपैड का अनुकरण करने के लिए।
टचपैड
उन शर्तों के बारे में थोड़ा जिसमें टचपैड के अनुकरण का सिद्धांत व्यक्त किया गया है - उनका उपयोग निम्नलिखित विवरण में किया गया है:
- स्टैटिक मूव - यदि उपयोगकर्ता अपनी उंगली को टचपैड की सीमा तक घसीटता है और वहां छोड़ देता है, तो नियंत्रित कर्सर धीरे-धीरे इस सीमा की दिशा में रेंगता रहेगा। एक क्लैंप किए गए क्लिक के साथ कर्सर को खींचने के लिए सुविधाजनक;
- स्क्रॉल - उपयोगकर्ता ने टचपैड के किनारे एक विशेष क्षेत्र पर एक उंगली चलाई, जिसे पहिया स्क्रॉल करने के रूप में व्याख्या की जाती है;
- स्क्रॉल पैड "विशेष क्षेत्र" है जिसका उल्लेख टचपैड के किनारे पर किया गया है। यदि उंगली उस पर चलना शुरू कर देती है, तो स्क्रॉलिंग चालू हो जाती है, अन्यथा यह एक सामान्य टचपैड की तरह काम करता है।
- जड़त्वीय स्क्रॉलिंग - उपयोगकर्ता ने स्क्रॉलिंग को सक्रिय कर दिया, और अपने आंदोलन को रोकने के बिना अपनी उंगली को हटा दिया। स्क्रॉलिंग को उपयोगकर्ता के हस्तक्षेप के बिना उसी गति से आगे किया जाएगा, जब तक कि वह टचपैड को फिर से छूने में सक्षम न हो।
- क्लिक करें और खींचें - क्लिक किया, अपनी उंगली को हटा दिया, और तुरंत फिर से क्लिक किया - अब आप एक क्लिक के साथ कर्सर को चला सकते हैं।
टचपैड तर्क माउसहैंडलर वर्ग में लागू किया गया है, यहाँ यह है:

विन्यास और विन्यासक सीधे प्रासंगिक नहीं हैं; माउसहैंडलर के साथ सभी कार्य इसकी घटनाओं को संसाधित करने के लिए नीचे आते हैं, जिसका उद्देश्य आम तौर पर नामों से स्पष्ट होता है।
कीबोर्ड
उपकरण तुच्छ है:

घटनाक्रम:
- OnKeyCommand - एक नियंत्रण चरित्र प्राप्त किया, इनमें से एक । सामान्य तौर पर, वे मानकीकृत होते हैं।
- OnKeyUnicode - प्रिंट करने योग्य चरित्र प्राप्त किया। KO यूनिकोड में नोटिस।
ग्राहक
एक वर्ग जिसका कार्य सर्वर को भेजने के लिए नियंत्रण संदेश उत्पन्न करना है:

हम कीबोर्डकोमैंड (), माउसमूव (), आदि की एक विधि के माध्यम से अनुरोधित कार्रवाई प्राप्त करते हैं; हम संदेश की रचना करते हैं, इसे OnPacketSend इवेंट के माध्यम से सॉकेट में भेजते हैं।
कॉन्फ़िगरेशन
उपयोगकर्ता को एक रूढ़िवादी XML प्रारूप में उनके कॉन्फ़िगरेशन को संपादित करने के लिए एक अनूठा अवसर के साथ प्रस्तुत किया गया है।
आवेदन उनके साथ कैसे लागू होता है, यदि कोई दिलचस्पी रखता है तो अपने लिए देखें। मैं इसके बारे में बात नहीं करना चाहता।

स्क्रीन:

विन्यास के मुख्य क्षेत्रों का उद्देश्य, नाम से स्पष्ट नहीं:
- buttonRightClickHold - राइट-क्लिक लॉक बटन दिखाएं। यानी जब दबाया जाता है, तो राइट क्लिक चिपक जाती है जब तक आप फिर से क्लिक नहीं करते। डिफ़ॉल्ट रूप से, बटन नहीं दिखाया गया है।
- buttonSettings - लैकोनिक कॉन्फिग एडिटर को कॉल करने के लिए बटन दिखाएं, जिसका स्क्रीनशॉट ऊपर है। डिफ़ॉल्ट रूप से, यह बटन किसी कारण से चालू होता है।
- clickAndDragDelay - वह समय जिसके दौरान आपको क्लिक और ड्रैग (ऊपर विवरण) प्राप्त करने के लिए टचपैड पर फिर से क्लिक करना होगा।
- LocationUpdateInterval - मिलीसेकंड में कर्सर की स्थिति को अपडेट करने के लिए अंतराल।
- स्टेटिकस्पीड - स्टेटिक मूव की गति, प्रति पैकेट पिक्सल।
- staticBoundsRelative - उस क्षेत्र की सीमाएं जिस पर स्टेटिक मूव सक्रिय है; समग्र विंडो आकार के सापेक्ष सेट किए गए हैं।
- स्क्रॉल इनहाउस पिक्सल्स - स्क्रॉल पैड की संवेदनशीलता; संख्या जितनी कम होगी, संवेदनशीलता उतनी ही अधिक होगी।
इंटरफ़ेस
इंटरफ़ेस आकर्षित करते समय, मैं काजीमीर मालेविच की लोकप्रिय पेंटिंग से प्रेरित था:

चूंकि जीयूआई को एक स्व-दस्तावेजीकरण उपयोगकर्ता इंटरफ़ेस माना जाता है, इसलिए मैंने अभी भी बटन हस्ताक्षर (बाईं ओर स्क्रीन) छोड़ दिया है, जो टचपैड के पहले स्पर्श (दाईं ओर स्क्रीन) के बाद गायब हो जाता है।
हां, मैंने अभी तक नहीं कहा है: स्क्रीन पर यह काला क्षेत्र टचपैड है; बटन का उद्देश्य उनके नाम से स्पष्ट होना चाहिए। कीबोर्ड का उपयोग करने से कोई समस्या नहीं होनी चाहिए।
टचपैड के लिए स्क्रीन क्षेत्र को बचाने के लिए विंडो के पोर्ट्रेट ओरिएंटेशन का उपयोग किया जाता है; जबकि टचपैड का उपयोग स्वयं परिदृश्य में माना जाता है (लेकिन यह अनुकूलन योग्य है)।
सर्वर
अजगर और
SendKeys का उपयोग करके अधिक या कम क्रॉस-प्लेटफ़ॉर्म सर्वर बनाने का पहला प्रयास विफल हो गया, क्योंकि यह पता चला कि SendKeys यूनिकोड को नहीं जानते हैं। एक माउस के साथ अजगर से कैसे काम करें, मैंने भी नहीं देखा।
दूसरा प्रयास (सफल) C में कंसोल एप्लिकेशन से WinAPI का उपयोग करना था, जहां
SendInput फ़ंक्शन का उपयोग करके माउस और कीबोर्ड स्ट्रीम को कमांड लिखने का कार्य किया जाता है।
यूडीपी सॉकेट और समय-समय पर SendInput () को सुनने वाला एक साधारण कंसोल एप्लिकेशन विचार करने लायक नहीं है। मैं केवल यह ध्यान देता हूं कि यह व्यावहारिक रूप से सिस्टम संसाधनों (विशेष रूप से क्लाइंट के डिस्कनेक्ट होने पर) का उपभोग नहीं करता है, ताकि इसे लगातार चालू रखा जा सके।
पोर्टेबिलिटी के लिए, किसी अन्य प्लेटफ़ॉर्म के लिए प्लेटफ़ॉर्म-विशिष्ट एप्लिकेशन लिखना मुश्किल नहीं होगा (दर्शकों को इसकी आवश्यकता होगी), क्योंकि एक आसान-से-कार्यान्वयन कार्यान्वयन का उपयोग प्रबंधित सिस्टम को कमांड देने के लिए किया जाता है।
प्रोटोकॉल
डेटा केवल क्लाइंट से सर्वर पर प्रेषित किया जाता है, कोई पावती या रिवर्स कमांड प्रदान नहीं की जाती है।
किसी भी कमांड को एक निश्चित आकार के फ्रेम में भेजा जाता है, जिसमें निम्नलिखित फ़ील्ड शामिल हैं:
- शीर्ष लेख - 3 बाइट्स, स्ट्रिंग "d2k"
- पैकेट का सीरियल नंबर (प्रसारण के समय पैकेट रिट्रीट से बचने के लिए, जो डिफ़ॉल्ट रूप से उपयोग किया जाता है) - 1 बाइट
- कमांड का प्रकार (कंट्रोल कैरेक्टर, यूनिकोड कैरेक्टर, मूव माउस इत्यादि) - 1 बाइट
- कमांड डेटा (कर्सर निर्देशांक, वर्ण कोड आदि) - 4 बाइट्स, थोड़ा एंडियन
डिफ़ॉल्ट पोर्ट 12358 (चयन एक
अनुक्रम टुकड़ा द्वारा प्रेरित)।
पूछे जाने वाले प्रश्न
प्रश्न: ठीक है, मैं Device2Keyboard का उपयोग करना चाहता हूं। इसके लिए मुझे क्या करने की आवश्यकता है?
ए: पोस्ट के अंत में लिंक का उपयोग करके क्लाइंट और सर्वर एप्लिकेशन डाउनलोड करें, और उन्हें लॉन्च करें। डिफ़ॉल्ट सेटिंग्स मानती हैं कि संचारक और सर्वर एक ही सबनेट पर होना चाहिए, क्योंकि क्लाइंट पर डिफ़ॉल्ट सर्वर पता 255.255.255.255:12358 (प्रसारण आईपी पता) है। सब कुछ बॉक्स से बाहर काम करेगा, कोई अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं है।
प्रश्न: मैं वायरलेस इंटरफेस का उपयोग नहीं करना चाहता। कैसे हो?
A: क्लाइंट के लिए डिफ़ॉल्ट सेटिंग्स को छोड़कर, ActiveSync के साथ प्रबंधित पीसी के लिए डिवाइस को कनेक्ट करें। सबकुछ चलेगा।
प्रश्न: ड्रैग'एन'ड्रॉप को निष्पादित करते समय मैंने क्लिक को ठीक कर दिया था, लेकिन सर्वर से कनेक्शन बाधित हो गया और क्लिक क्लैंप हो गया। क्या करें?
एक: 3 सेकंड तक प्रतीक्षा करें। यदि सर्वर को इस समय के दौरान माउस क्लिक की स्थिति निर्धारित करने के लिए क्लाइंट से कमांड प्राप्त नहीं होती है, तो यह उन सभी बटन को जारी करेगा जो आयोजित किए गए हैं।
प्रश्न: यदि आप लंबे समय तक माउस कर्सर को हिलाते हैं, तो मेरा नेटवर्क भारी ट्रैफ़िक के कारण गिर जाएगा, है ना?
ए: कर्सर स्थिति को अपडेट करने के लिए डिफ़ॉल्ट आवृत्ति 10ms (प्रति सेकंड 100 बार) है; पैकेट का आकार (3 + 1 + 1 + 4) == 9 बाइट्स, + UDP / IP फ्रेम 28 बाइट्स ओवरहेड, हमें 1 संदेश में 37 बाइट्स, या 3.6 kbit / s मिलते हैं। यदि माउस नहीं चलता है, तो उसकी स्थिति अपडेट नहीं की जाती है। जवाब है नहीं।
निष्कर्ष
WM और डेस्कटॉप के लिए आवेदन, इंस्टॉलेशन की आवश्यकता नहीं है:
dl.dropbox.com/u/3815390/dev2kbd/bin/bin.7zस्रोत:
dl.dropbox.com/u/3815390/dev2kbd/src/src.7zआवेदन और इसके स्रोत
डब्ल्यूटीएफपीएल लाइसेंस के तहत वितरित किए जाते हैं।
शीर्षक से फोटो, स्रोत:
migdal-or.livejournal.com/55703.html