如果需要检测键盘快捷键,我应该处理哪条消息?

时间:2011-01-27 08:09:13

标签: c# winapi keyboard keyboard-shortcuts

假设我在我的应用程序中寻找键盘快捷键 Alt + C 。我相信我不能因为各种原因处理WM_KEYDOWN,其中一个原因是它用于检测非系统密钥,并且没有特别告诉您 Alt 密钥。它只有一个1位的单位来告诉你是否按下任何扩展键和虚拟键。

我相信WM_CHAR对我来说更适合我。我的问题是:

a)我的假设是正确的吗?

b)如何从wParam获取字符代码并将其与 Alt + C 进行比较?

2 个答案:

答案 0 :(得分:1)

您可以使用WM_SYSKEYDOWN和WM_SYSCHAR来检测Alt键。

您在this article中了解更多信息。

a)不,WM_CHAR将无法检测并按下。

答案 1 :(得分:0)

对于常规键盘快捷键处理,最好使用Control.ProcessCmdKey覆盖。

在Win32中称为键盘加速器。

我没有Control.ProcessCmdKey的直接经验,但看起来很容易。

Google搜索找到的示例: http://www.codeguru.com/columns/experts/article.php/c4639

protected override bool ProcessCmdKey( ref Message msg, 
                                       Keys keyData )
{
    // Check this key...
    bool bHandled = false;

    // Look up value
    Accelerators accel = Accelerators.Unspecified;
    if ( _accelHash.ContainsKey(AcceleratorKey(keyData)) )
    {
        accel = (Accelerators)_accelHash[key];

        switch ( accel )
        {
            case Accelerators.Home:
                DisplayHome();
                bHandled = true;
                break;

            case Accelerators.Save:
                Save();
                bHandled = true;
                break;

            case Accelerators.Print:
                Print();
                bHandled = true;
                break;

            case Accelerators.Logout:
                LogOut();
                bHandled = true;
                break;

            case Accelerators.Unspecified:
            default:
                break;

        } // switch
    } // if

    return bHandled;
}