Как я могу получить Ctrl +, Высокий звук + K + P включает форму C#?спасибо
MessageFilters
могут помочь вам в этом случае.
public class KeystrokMessageFilter : System.Windows.Forms.IMessageFilter
{
public KeystrokMessageFilter() { }
#region Implementation of IMessageFilter
public bool PreFilterMessage(ref Message m)
{
if ((m.Msg == 256 /*0x0100*/))
{
switch (((int)m.WParam) | ((int)Control.ModifierKeys))
{
case (int)(Keys.Control | Keys.Alt | Keys.K):
MessageBox.Show("You pressed ctrl + alt + k");
break;
//This does not work. It seems you can only check single character along with CTRL and ALT.
//case (int)(Keys.Control | Keys.Alt | Keys.K | Keys.P):
// MessageBox.Show("You pressed ctrl + alt + k + p");
// break;
case (int)(Keys.Control | Keys.C): MessageBox.Show("You pressed ctrl+c");
break;
case (int)(Keys.Control | Keys.V): MessageBox.Show("You pressed ctrl+v");
break;
case (int)Keys.Up: MessageBox.Show("You pressed up");
break;
}
}
return false;
}
#endregion
}
Теперь в вашей C # WindowsForm зарегистрируйте MessageFilter для захвата нажатий клавиш и комбинаций.
public partial class Form1 : Form
{
KeystrokMessageFilter keyStrokeMessageFilter = new KeystrokMessageFilter();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Application.AddMessageFilter(keyStrokeMessageFilter);
}
}
Каким-то образом он обнаруживает только Ctrl + Alt + K . Пожалуйста, прочтите комментарий в коде MessageFilter.
Я не уверен, что вы можете. Однако вы можете сделать это так, как это делает Visual Studio. В ней есть такие сочетания клавиш, как Ctrl + K, C. Сначала вы нажимаете Ctrl+K, затем удерживаете Ctrl и нажимаете C. В вашем случае можно проверить Ctrl+Alt+K,P.
Вы можете сначала проверить наличие только Ctrl+Alt+K, как это сделано в других ответах, затем установить переменную-член/флаг, указывающий на то, что Ctrl+Alt+K был нажат. В том же методе, где вы проверяете наличие K, вы можете проверить наличие P, и если флаг, который вы только что установили, был установлен в true, сделайте все, что вам нужно. В противном случае установите флаг обратно в false.
Грубый псевдокод:
private bool m_bCtrlAltKPressed = false;
public void KeyDown() {
if (Ctrl+Alt+K)
{
m_bCtrlAltKPressed = true;
}
else if (Ctrl+Alt+P && m_bCtrlAltKPressed) {
//do stuff
}
else {
m_bCtrlAltKPressed = false;
}
}
Надеюсь, это достаточно понятно.
Это аккорд, вы не можете распознать его, не запомнив, увидев первое нажатие клавиши аккорда. Это работает:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private bool prefixSeen;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (prefixSeen) {
if (keyData == (Keys.Alt | Keys.Control | Keys.P)) {
MessageBox.Show("Got it!");
}
prefixSeen = false;
return true;
}
if (keyData == (Keys.Alt | Keys.Control | Keys.K)) {
prefixSeen = true;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
Посмотрите эту замечательную статью в блоге о настройке горячих клавиш в c#
Есть также хорошая статья, которая объясняет все это здесь