2012-10-15 18 views
13

ALT + F4 C#アプリケーションでは、アプリケーション全体の使用を無効にするにはどうすればよいですか?私のアプリケーションでアプリケーションでalt + F4を無効にする方法はありますか?

、私は多くのWinFormsを持っていると私はALT +F4を使用してフォームを閉じる機能を無効にしたいです。ユーザーは、フォームの「X」を使用してフォームを閉じることができます。

また、これは1つの形式ではありません。 ALT + F4は、アプリケーション全体で無効になっており、いずれのフォームでも機能しません。出来ますか?あなたがメインの起動方法では、このようなものを入れることができ

+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番目のビットをControl.ModifierKeysの代わりに使用するように答えを更新しました。 –

関連する問題