0

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

有没有办法阻止 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;

    }               
4

2 回答 2

0

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

于 2012-06-07T19:03:53.073 回答
0

该按钮就像一个切换按钮,它会在第一次按下时静音,在下一次按下时“取消静音”。您只需要再次模拟 VolumeMute 按下即可。

这个答案解释了如何做到这一点。

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

于 2012-06-07T00:57:23.140 回答