检测头戴式耳机是否插入

有什么方法可以通过编程方式确定耳机插入电脑的时间吗?

从本质上讲,我只想写一个简单的工具,将我的声音静音,除非耳机插入。这甚至可能吗?

在Windows Vista及更高版本中,您可以使用设备到达和删除通知,并检索端点窗体因子,以确定您的audio解决scheme的制造商是否将特定端点视为“耳机”。

在Vista之前,没有办法确定这些信息。

许多audio编解码器提供“插孔检测”,这可能是你需要谷歌的术语。

看来在Vista下,可以使用IMMDeviceEnumerator :: GetDefaultAudioEndpoint()和IMMDevice :: GetState()来检查“端点”的状态。 还有'IKsJackDescription接口' 。

在XP下,您可以尝试“waveInGetNumDevs” – 驱动程序可能会报告0,直到插入耳机。有关详细信息,请参阅此讨论中的注释。

我认为你不能提供一个通用的解决scheme。

我也指出了nray的解决scheme。 大多数Realtek声卡,特别是Intel主板上的Realtek都有这个function。 但在这种情况下,硬件不是“标准”的。 换句话说,在那些声卡中,应该有特殊的机制来检测输出sockets的节点上的阻抗变化,并且“触发一个事件”

如果你有这种types的声卡+你只需要一个工作,但不是完美的解决scheme,只需修改调用configure程序的例程。 (一个静音/取消静音的程序)。 然后用你的新工具replaceconfigurer程序(你可以使用进程pipe理器find它)。

NB我不是100%确定我们是否可以识别插件 – 明确插入。

这可能是可能的 – RealTek有一个系统托盘工具,popup一个恼人的有用的实用程序来调整你的audio,每当你连接到麦克风插孔的东西,也许耳机插孔是类似的。

除非你的声卡支持它,这是值得怀疑的。

可以想象的是,一些声卡中有一个微动开关,用于检测耳机何时插入,或者可以测量信号的阻抗以知道电路何时闭合。 我没有看到在任何便宜的声卡。

现在,如果您有一个与麦克风共享的插孔(例如,头戴式耳机),您可能能够检测到麦克风通道上的“stream行音乐”,但是我将面临的风险依然相当不可靠。 你不知道它是否被插入或删除,只是发生了变化。

就个人而言,我只是把声音静音,只有当我真的想要声音时才开启。