音量静音按键 - 处理后无法取消事件
本文关键字:取消 事件 处理 | 更新日期: 2023-09-27 18:36:23
我有 C# 应用程序,可以通过 KeyDown 和 KeyPress 事件监控击键。具体来说,它会监视VolumeMute击键(来自手持设备)以执行一些特殊处理。它适用于一个问题:Windows似乎拦截了VolumeMute击键并将系统音量静音(我不想发生这种情况)。我认为 Windows 在我的应用程序处理击键之前会拦截击键,因为即使我发出击键已处理的信号(e.Handle = true),它仍然会使系统音量静音。顺便说一句,相同的代码非常适合我捕获的其他击键(例如退格键等)。
有没有办法阻止 Windows 将此音量静音?
系统: WinXP SP3, .Net 4 Client Profile, Windows Forms app
代码截图
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;
}
按钮的作用类似于切换,第一次按下时将静音,下一次按下时将"取消静音"。您所需要的只是再次模拟音量静音按下。
这个答案解释了如何做到这一点。
注意:如果从 KeyDown 处理程序内部调用此方法,则可能需要使用 BeginInvoke 或 PostMessage 将消息发布到消息队列并立即返回,以避免争用条件。
好的。我最终使用AutoHotKey将VolumeMute重新映射到另一个键。重要的是,Windows在重新映射之前永远不会看到VolumeMute击键,并且不会静音。所以我可以在需要时启动这个自动热键重映射脚本。打乱Windows注册表。感谢您的建议。