2009-02-23 3 views

उत्तर

42

आयात WinAPI समारोह GetKeyState

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)] 
public static extern short GetKeyState(int keyCode); 

और फिर आपको लगता है कि

bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0; 
bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0; 
bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0; 

संपादित की तरह उपयोग कर सकते हैं: ऊपर ढांचा 2.0 + के लिए, ढांचे 1.1 के लिए है आप उपयोग कर सकते

Control.IsKeyLocked

+1

मैं यहां गलत हो सकता हूं, लेकिन क्या यह केवल विंडोज रिलीज के लिए कड़ाई से काम नहीं करेगा? पहला विकल्प सीधे एक .dll में हुक करता है, जबकि दूसरे को System.Windows.Forms –

+0

की आवश्यकता होती है यदि आप WinForms का उपयोग नहीं कर रहे हैं, (उदाहरण के लिए कंसोल) आप '(bool) कंसोल का उपयोग कर सकते हैं। कैप्सलॉक। –

10

किसी को भी इस धागे भर आता है, जबकि WPF में विकसित कर रहा है, तो आप Keyboard.IsToggled विधि जो .NET 3.0 में पेश किया गया था का उपयोग कर सकते हैं:

var isNumLockToggled = Keyboard.IsKeyToggled(Key.NumLock); 
var isCapsLockToggled = Keyboard.IsKeyToggled(Key.CapsLock); 
var isScrollLockToggled = Keyboard.IsKeyToggled(Key.Scroll); 

आप करेंगे निम्नलिखित using निर्देश को अपनी कक्षा के शीर्ष पर निर्देशित करना होगा, यदि यह पहले से मौजूद नहीं है:

using System.Windows.Input; 

आंतरिक रूप से, IsToggled() विधि यह देखने के लिए जांचती है कि KeyStates.Toggled ध्वज निर्दिष्ट कुंजी के लिए सेट है या नहीं।

[Flags] 
public enum KeyStates : byte 
{ 
    None = (byte) 0, 
    Down = (byte) 1, 
    Toggled = (byte) 2, 
} 
4

चेक राज्य

के राज्य CapsLock, NumLock और ScrollLock कुंजी जाँच करने के लिए आप उपयोग कर सकते Control.IsKeyLocked विधि:

var capsLockIsOn = Control.IsKeyLocked(Keys.CapsLock); 

सक्रिय स्टेडियम दिखाएँ ते

चूंकि आपके एप्लिकेशन में फोकस हैंडलिंग कुंजीपटल घटनाएं नहीं हैं, इसलिए मुख्य लॉक स्थिति में परिवर्तनों का पता लगाने के लिए पर्याप्त नहीं है और आपको अपना तर्क भी रखना चाहिए कुछ अन्य स्थानों जैसे कि आपके फॉर्म की सक्रियण घटना या आपको वैश्विक कीबोर्ड हुक पंजीकृत करने की आवश्यकता है।

एक सरल और विश्वसनीय समाधान के रूप में आप Application.Idle ईवेंट में अपनी स्थिति की जांच कर सकते हैं। आपका फॉर्म बंद होने पर आपको अपने निष्क्रिय ईवेंट हैंडलर को अलग करना होगा।

public Form1() 
{ 
    InitializeComponent(); 
    Application.Idle += Application_Idle; 
} 

void Application_Idle(object sender, EventArgs e) 
{ 
    if (Control.IsKeyLocked(Keys.CapsLock)) 
     toolStripStatusLabel1.Text = "CapsLock is On"; 
    else 
     toolStripStatusLabel1.Text = ""; 
} 

protected override void OnFormClosed(FormClosedEventArgs e) 
{ 
    Application.Idle -= Application_Idle; 
    base.OnFormClosed(e); 
} 
+0

क्या आपका एप्लिकेशन नहीं चल रहा है इसके बारे में क्या? उदाहरण के लिए आप एक लॉगिन विंडो खोलते हैं और आप उपयोगकर्ता को चेतावनी देना चाहते हैं कि कैप्स –

+1

@LeandroTupone पर है जब आपकी लॉगिन विंडो दिखाई दे रही है, तो इसका मतलब है कि आपका एप्लिकेशन चल रहा है।जब चाहें कुंजी की स्थिति की जांच करने के लिए, आप उत्तर में पहले विकल्प का उपयोग कर सकते हैं। सक्रिय रूप से राज्य के बारे में जागरूक होने के लिए, आप दूसरे विकल्प का उपयोग कर सकते हैं। –

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