C# Windows 窗体应用程序热键 - KeyDown 事件不起作用

Posted

技术标签:

【中文标题】C# Windows 窗体应用程序热键 - KeyDown 事件不起作用【英文标题】:C# Windows Forms Applications Hotkey - KeyDown event not working 【发布时间】:2020-11-02 01:07:08 【问题描述】:

我阅读了很多关于为 Windows 窗体应用程序制作热键的问题,并尝试了很多人说它有效的代码,但对我来说,不知何故。

代码:

void Form1_KeyDown(object sender, KeyEventArgs e)
    
        if (e.Control && e.KeyCode == Keys.S)   
        
          timer1.Stop();
            e.SuppressKeyPress = true; 
        
    

【问题讨论】:

【参考方案1】:

如果您想为您的表单创建全局热键管理器以供该表单中的所有控件使用,您需要覆盖捕获所有控件的所有键的Form.ProcessCmdKey() 方法,而不是使用仅在背景聚焦时有效,并且仅在 ActiveControlnull 时才会发生:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

  switch ( keyData )
  
    case Keys.Control | Keys.S:
      timer1.Stop();
      return true;
  
  return base.ProcessCmdKey(ref msg, keyData);

因此,您可以捕获所需的任何组合键并在处理后返回 true。

【讨论】:

以上是关于C# Windows 窗体应用程序热键 - KeyDown 事件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 设置全局热键

Windows Forms .NET 中的热键(非全局)

C#如何在 Windows 窗体应用程序中使用事件

C++ 热键运行功能

我用C#创建的是windows窗体应用项目,做的是登陆页面,里面可以使用session吗

qt 注册热键