2012-10-15 3 views
13

मैं ALT + F4 सी # अनुप्रयोगों के लिए आवेदन-व्यापी के उपयोग को कैसे अक्षम कर सकता हूं?एप्लिकेशन के लिए alt + F4 को कैसे अक्षम करें?

अपने आवेदन में, मैं कई WinForms है और मैं एएलटी का उपयोग कर + F4 रूपों को बंद करने की क्षमता को अक्षम करना चाहते हैं। उपयोगकर्ता हालांकि फॉर्म के "एक्स" का उपयोग करके फॉर्म को बंद करने में सक्षम होना चाहिए।

फिर यह सिर्फ एक रूप के लिए नहीं है। मैं एक रास्ता तलाश रहा हूं ताकि एएलटी + एफ 4 पूरे एप्लिकेशन के लिए अक्षम है और किसी भी फॉर्म के लिए काम नहीं करेगा। क्या यह संभव है?

+13

आप अपने आप को एक सवाल पूछने चाहिए - तुम क्यों समापन संवाद के इस मानक तरीका दूर करने के लिए करना चाहते हैं? आप सम्मेलन तोड़ रहे हैं और ऐसा करने के लिए बहुत अच्छे कारण की आवश्यकता है - उपयोगकर्ता अनुभव स्टैक एक्सचेंज देखें। – Ian

+4

वाह संभावित डुप्लिकेट उस व्यक्ति के लिए सटीक था जिसने इसका उत्तर दिया और फिर अचानक इसे हटा दिया। छायादार! – JonH

+7

वाह और फिर इसे संपादित करना: 'मैं निम्नलिखित करने की अनुशंसा करता हूं:', @Daniel कृपया क्रेडिट लेने के दौरान दूसरों से जवाब कॉपी और पेस्ट करना बंद करें। प्रश्न को डुप्लिकेट के रूप में बंद करें और अपने समय के साथ बेहतर चीजें ढूंढें। – JonH

उत्तर

4

आप मुख्य स्टार्टअप विधि में कुछ इस तरह डाल सकता है:

namespace WindowsFormsApplication1 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.AddMessageFilter(new AltF4Filter()); // Add a message filter 
      Application.Run(new Form1()); 
     } 
    } 

    public class AltF4Filter : IMessageFilter 
    { 
     public bool PreFilterMessage(ref Message m) 
     { 
      const int WM_SYSKEYDOWN = 0x0104; 
      if (m.Msg == WM_SYSKEYDOWN) 
      { 
       bool alt = ((int)m.LParam & 0x20000000) != 0; 
       if (alt && (m.WParam == new IntPtr((int)Keys.F4))) 
       return true; // eat it!     
      } 
      return false; 
     } 
    } 
} 
+1

यह एक दिलचस्प समाधान है। क्या होगा अगर संदेश देर से संसाधित हो (देरी के कारण) और 'Control.ModifierKeys' अब रिपोर्ट नहीं करता है कि' Ctrl' दबाया गया है (इसे याद किया गया है)? समाधान के लिए –

+0

धन्यवाद। मैं इस तरह कुछ ढूंढ रहा था। Alt + F4 के साथ-साथ, यह alt + shift + F4 को भी फ़िल्टर करता है। बस आपको यह बताने के लिए। – mchicago

+1

@AllonGuralnek - हम्म ... मुझे लगता है कि हमारे पास एक चुनिंदा दर्शक हैं :-) मैंने नियंत्रण के बजाय lParam के 29 वें बिट का उपयोग करने के लिए अपना जवाब अपडेट किया है। मॉडिफायरकेज़। –