如何在c#中获得组合键

Ris*_*vak 10 c# keyboard keyboard-shortcuts keyboard-events

如何在C#表单上捕获Ctrl+ Alt+ K+ P键?谢谢

Han*_*ant 12

这是一个和弦,如果没有记住和弦的第一次击键,就无法检测到它.这有效:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Viv*_*lin 8

我不确定你能不能.但是,你可以做的是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;
  }
}
Run Code Online (Sandbox Code Playgroud)

希望足够清楚.


Cod*_*uth 1

请参阅这篇关于在 C# 中设置热键的精彩博客文章

\n\n\n\n

这里还有一篇很好的文章解释了这一切

\n\n\n