我有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;
}
答案 0 :(得分:0)
此按钮的作用类似于切换,它会在第一次按下时静音,并在下次按下时“取消静音”。您只需要再次模拟VolumeMute按下。
这answer解释了如何做到这一点。
注意:如果从KeyDown处理程序内部调用此方法,则可能需要使用BeginInvoke或PostMessage将消息发布到消息队列并立即返回以避免竞争条件。
答案 1 :(得分:0)
确定。我最终使用AutoHotKey将VolumeMute重新映射到另一个键。重要的是,Windows在重新映射之前从未看到VolumeMute按键,并且不会使声音静音。所以我可以在需要时启动这个AutoHotKey重映射脚本。打败Windows注册表。感谢您的建议。