VolumeMute KeyPress - 处理后无法取消事件

时间:2012-06-06 22:15:52

标签: c# keypress keydown

我有C#app,通过KeyDown和KeyPress事件监视击键。具体来说,它会监视VolumeMute按键(来自手持设备)进行一些特殊处理。它可以解决一个问题:Windows似乎拦截了VolumeMute键击并使系统音量静音(我不想发生这种情况)。我认为Windows会在我的应用程序处理之前拦截击键,因为即使我发出按键处理信号(e.Handled = true),它仍会使系统音量静音。顺便说一句,相同的代码适用于我正在捕捉的其他键击(ex Backspace,ect)。

有没有办法阻止Windows进行此音量静音?

系统:WinXP SP3,.Net 4客户端配置文件,Windows窗体应用

代码剪辑

    bool keyHandled = false;

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (keyHandled)
        {
            e.Handled = true;
        }
    }
    // =====================================
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        keyHandled = false;



        switch (e.KeyCode)
        {

            case Keys.VolumeMute:
                DoSpecialProcessing(); 
                keyHandled = true;
                break;
            default:

                break;
        }

        e.Handled = keyHandled;

    }               

2 个答案:

答案 0 :(得分:0)

此按钮的作用类似于切换,它会在第一次按下时静音,并在下次按下时“取消静音”。您只需要再次模拟VolumeMute按下。

answer解释了如何做到这一点。

注意:如果从KeyDown处理程序内部调用此方法,则可能需要使用BeginInvoke或PostMessage将消息发布到消息队列并立即返回以避免竞争条件。

答案 1 :(得分:0)

确定。我最终使用AutoHotKey将VolumeMute重新映射到另一个键。重要的是,Windows在重新映射之前从未看到VolumeMute按键,并且不会使声音静音。所以我可以在需要时启动这个AutoHotKey重映射脚本。打败Windows注册表。感谢您的建议。