2010-04-30 10 views
5

सी ++ विंडोज वातावरण में कीबोर्ड नियंत्रणों का जिक्र करते समय 0x80 कोड का क्या अर्थ है?कीबोर्ड नियंत्रणों का जिक्र करते समय 0x80 कोड का क्या अर्थ है

उदाहरण के लिए,

if(GetKeyState('K') & 0x80) { 
    //do something 
} 

सभी को धन्यवाद!

+0

मुझे लगता है कि आप अपने कोड उदाहरण में कोई गलती है के रूप में - यह GetKeyState ('के') और 0x8000 – Stewart

+0

यह अपने आवेदन में काम कर रहा है होना चाहिए जैसा कि यद्यपि है? – Paz

+2

"काम करने" से आपका क्या मतलब है? यदि आपको नहीं पता कि यह क्या करना है, तो आप कैसे जानते हैं कि यह काम कर रहा है? – Stewart

उत्तर

1

the documentation

वापसी मान के अनुसार निर्दिष्ट आभासी कुंजी की स्थिति निर्दिष्ट करता है:
उच्च आदेश बिट 1 है, तो कुंजी को दबाए है; अन्यथा, यह ऊपर है।
यदि निम्न-आदेश बिट 1 है, तो कुंजी को टॉगल किया जाता है। एक कुंजी, जैसे कि सीएपीएस लॉक कुंजी, चालू होने पर टॉगल की जाती है। कुंजी कम है और कम-ऑर्डर बिट 0 है। कुंजीपटल पर एक टॉगल कुंजी का सूचक प्रकाश (यदि कोई है) तब होगा जब कुंजी को टॉगल किया जाता है, और जब कुंजी अनगिनत होती है तो बंद हो जाती है।

शायद एक गैर toggleable कुंजी (जैसे कि एक 'के') के साथ

, कम-आदेश (अस्पष्ट शब्द - शायद वे 0x0080 मतलब है?) और उच्च आदेश (0x8000) बिट्स एक ही बात करते हैं?

+0

एमएसडीएन दस्तावेज नहीं है अस्पष्ट - लघु का उच्च क्रम बिट 0x8000 है। कम ऑर्डर बिट 0x0001 है। मुझे यह सच होने के बारे में पता है क्योंकि जब भी मैंने इस फ़ंक्शन का उपयोग किया है, तो मैं आमतौर पर इसे 0 0 और 8x8000 के बजाय <0 के साथ परीक्षण करता हूं - यह वही चीज़ प्राप्त करता है। – Stewart

+0

@ स्टीवर्ट: यही वह है जो मैं भी सोचूंगा - लेकिन फिर, दुनिया में क्यों यह काम करेगा (अगर यह वास्तव में काम करता है)? ... इसके अलावा, आपने जो कहा है उसके साथ कुछ भी नहीं है कि "लो-ऑर्डर बिट" 0x0080 या 0x0001 है .. –

+0

मुझे नहीं लगता कि मुझे कभी भी कम बिट की आवश्यकता है। मुझे संदेह है कि कोड "काम करता है" क्योंकि दस्तावेज़ 1 से 14 के बिट्स के अर्थ के बारे में कुछ नहीं कहता है। उदासीन गैर-टॉगल करने योग्य कुंजी 0xfffe दस्तावेज़ों के अर्थ के भीतर पूरी तरह से मूल्य वापसी मूल्य होगा – Stewart

7

अद्यतन

downvotes की बाढ़ मुझे इस आगे की जांच में ला दिया। यहां बताया गया है कि GetKeyState के रिटर्न मान (हेक्स में) कैसे काम करते हैं। मुझे k जैसी कुंजी की टॉगल प्रॉपर्टी नहीं मिलती है, लेकिन मुझे लगता है कि इसमें कुछ डिफ़ॉल्ट स्थिति है जो इसे टॉगल करती है।

0  Default State, key up 
ff80 Default state, key down 
1  Toggled, key up 
ff81 Toggled, key down 

तो 0xff80 जोड़ा जब भी उच्च आदेश बिट सेट करने की आवश्यकता और कम आदेश बिट समझ में आता है जाता है। तो अब हम जानते हैं कि 0x80 दृष्टिकोण काम करता है --- क्योंकि निचले बाइट के उच्च-आदेश बिट को भी सेट किया गया है!

ओल्ड उत्तर

GetKeyState रिटर्न एक SHORT जहां अगर उच्च आदेश बिट 1 है यह कुंजी का मतलब है। bitwise AND0x80 के साथ ऑपरेशन बस यह जांचता है कि वह बिट 1 है क्योंकि बाइनरी 0x8010000000 है।

इसलिए बयान GetKeyState('K') & 0x800x80 वापसी होगी अगर GetKeyState('K') द्वारा दिए गए मान के उच्च आदेश बिट 1 और 0 है अगर उच्च आदेश बिट 0 है।

+1

हालांकि, उच्च आदेश बिट 'SHORT' का' 0x8000' –

+0

होगा जो बीईटीई का उच्च हिस्सा होगा, लेकिन फ़ंक्शन लघु लौटाता है, जो कि 16-बिट – Stewart

+0

समाधान के साथ मेरा उत्तर अपडेट किया गया है! – Jacob

3

MSDN documentation of the function कहता है:

उच्च आदेश बिट 1 है, तो कुंजी नीचे है; अन्यथा, यह ऊपर है।

बिट-वार और यदि परिणाम शून्य या गैर-शून्य है और सार में है कि बिट का मान की जाँच करता है 0x80 आप उच्च आदेश बिट, if चेकों देता है के साथ।

यह चेक हालांकि GetKeyState()SHORT लौटाता है और एक छोटे से उच्च आदेश बिट को जांचने के लिए आपको थोड़ा-सा और 0x8000 के साथ जांचने के लिए एक गलती की तरह दिखता है।
तो मेरा सुझाव है कि आप एक डीबगर के साथ वापसी मूल्य की जांच करें और सत्यापित करें कि यह वास्तविकता में कैसे काम करता है।

2

मुझे लगता है कि आपका मतलब 0x8000 है, 0x80 नहीं। इस प्रकार,

वापसी मान निर्दिष्ट आभासी कुंजी की स्थिति निर्दिष्ट करता है:

-: अगर ऐसा है, तो आप प्रलेखन ( http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx) जो GetKeyState की वापसी मूल्य पर कहने के लिए निम्नलिखित है से परामर्श करना चाहिए

• यदि उच्च-आदेश बिट 1 है, तो कुंजी नीचे है; अन्यथा, यह ऊपर है। • यदि निम्न-आदेश बिट 1 है, तो कुंजी को टॉगल किया गया है। एक कुंजी, जैसे कि सीएपीएस लॉक कुंजी, चालू होने पर टॉगल की जाती है। कुंजी कम है और कम-ऑर्डर बिट 0 है। कुंजीपटल पर एक टॉगल कुंजी का सूचक प्रकाश (यदि कोई है) तब होगा जब कुंजी को टॉगल किया जाता है, और जब कुंजी अनगिनत होती है तो बंद हो जाती है।

0x80 कुछ भी मतलब नहीं है कि जहाँ तक मुझे पता है, हालांकि

+0

'0x80' काम करेगा, मेरा जवाब जांचें। – Jacob

+0

यह काम करेगा, लेकिन आप अनियंत्रित व्यवहार के आधार पर हैं। 0x8000 बेहतर है। – Stewart

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