2012-02-23 15 views
2

私がしたいのは、入力としてキーの組み合わせを受け入れるTextBoxを実装することです。たとえば、これらのキー(WindowsフォームまたはWPF)を押すと、テキストWin + Ctrl + Aが表示されます。ショートカットエディタTextBoxを実装する最善の方法は何ですか?

良い例は、「グローバルホットキー」の下のWinamp設定です。

+0

@DJKRAZEを私は彼が何が押されたのかを彼に示すためにテキストボックスにしたいと思う。プレスを出さない。 – DaveShaw

+0

@DaveShawまさに – Tibi

+0

彼はキーをキャプチャすることで同様にそれを行うことができます。押したキーの3つのキーの組み合わせがある場合、コードはif(e.KeyCode == Keys.Enter && Key.CTRL && key.H)forこれは、KeyDownEventでこれを行います..これは、あなたが始めるのを助けるはずです.. if(e.KeyCode == Win + Crl + A)append Key。 Winのために、Ctrl、A – MethodMan

答えて

3

これは、あなたが押されているほぼすべてのキーを検出する方法である: ソース:How to detect the currently pressed key?

private KeyMessageFilter m_filter = new KeyMessageFilter(); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    Application.AddMessageFilter(m_filter); 

} 


public class KeyMessageFilter : IMessageFilter 
{ 
    private Dictionary<Keys, bool> m_keyTable = new Dictionary<Keys, bool>(); 

    public Dictionary<Keys, bool> KeyTable 
    { 
     get { return m_keyTable; } 
     private set { m_keyTable = value; } 
    } 

    public bool IsKeyPressed() 
    { 
     return m_keyPressed; 
    } 

    public bool IsKeyPressed(Keys k) 
    { 
     bool pressed = false; 

     if (KeyTable.TryGetValue(k, out pressed)) 
     { 
      return pressed;     
     } 

     return false; 
    } 

    private const int WM_KEYDOWN = 0x0100; 

    private const int WM_KEYUP = 0x0101; 

    private bool m_keyPressed = false; 


    public bool PreFilterMessage(ref Message m) 
    { 
     if (m.Msg == WM_KEYDOWN) 
     { 
      KeyTable[(Keys)m.WParam] = true; 

      m_keyPressed = true; 
     } 

     if (m.Msg == WM_KEYUP) 
     {     
      KeyTable[(Keys)m.WParam] = false; 

      m_keyPressed = false; 
     } 

     return false; 
    } 
} 
+0

面白い、私はこれを試してみるかもしれない。 – Tibi

0

はチェックこのアウト:

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    HotKeyCls h = new HotKeyCls() { Ctrl = e.Control, Alt = e.Alt, Shift = e.Shift, Key = e.KeyCode }; 
    textBox1.Text = h.ToString(); 
} 

HotKeyCls:

//Coded by Amen Ayach's DataClassBuilder @23/02/2012 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

public class HotKeyCls{ 

    private bool _Ctrl; 
    public bool Ctrl{ 
     get { 
      return _Ctrl; 
     } 
     set { 
      _Ctrl = value; 
     } 
    } 

    private bool _Shift; 
    public bool Shift{ 
     get { 
      return _Shift; 
     } 
     set { 
      _Shift = value; 
     } 
    } 

    private bool _Alt; 
    public bool Alt{ 
     get { 
      return _Alt; 
     } 
     set { 
      _Alt = value; 
     } 
    } 

    private System.Windows.Forms.Keys _Key; 
    public System.Windows.Forms.Keys Key 
    { 
     get { 
      return _Key; 
     } 
     set { 
      _Key = value; 
     } 
    } 

    public override string ToString() 
    { 
     return (Ctrl ? "Ctrl+" : "") + (Shift ? "Shift+" : "") + (Alt ? "Alt+" : "") + Key.ToString();   
    } 
} 
関連する問題