允许计算机在从 Windows 应用程序播放音频时进入睡眠状态

Posted

技术标签:

【中文标题】允许计算机在从 Windows 应用程序播放音频时进入睡眠状态【英文标题】:Allow computer to sleep while playing audio from a Windows application 【发布时间】:2018-11-10 23:53:50 【问题描述】:

我正在开发一个在后台播放音频的 Windows 10 应用程序。我想做的是让计算机在播放音频时仍进入睡眠模式(如电源和睡眠设置,XX 分钟后睡眠)。我的意思是停止播放音频并进入睡眠状态(在睡眠状态下不继续播放)。这甚至可能吗?在线搜索并没有什么成果,因为我几乎只能找到有关如何防止睡眠的信息,而不是启用它。

运行 powercfg.exe /requests 显示音频播放确实阻止了睡眠:

SYSTEM:
[DRIVER] Realtek High Definition Audio (...)
An audio stream is currently in use.

我目前正在使用IAudioClient 和IAudioRenderClient 接口进行播放,通过client->Start()、renderClient->GetBuffer()。如有必要,我可以切换到不同的 API。但是,无论我使用什么,都需要允许其他应用程序(VLC、YouTube、Windows 声音等)同时正常播放音频。

我的应用程序始终在我使用它的系统上运行,我只是希望系统能够在设置的系统超时时进入睡眠状态。我还需要将此例外仅应用于我的应用程序 - 如果其他应用程序正在播放会阻止睡眠的音频,则系统不应睡眠。

是否有任何 Windows API 调用可以使 Windows 忽略我的应用程序正在播放音频并仍然让系统进入睡眠模式?

【问题讨论】:

【参考方案1】:

您所要求的在今天是不可能的。当系统进入睡眠状态时,它实质上意味着系统中的处理器停止执行任何指令并关闭电源。虽然这不像是关闭系统,但已经非常接近了。连接到处理器的所有设备也会断电以节省电池/功耗。

【讨论】:

抱歉,我的问题并不清楚。我并不是要在睡眠时继续播放音频,我只是想睡觉并停止播放音乐。我可以单击 Windows 图标,在播放音频时选择电源、睡眠。我想要它做的是在设置的系统超时时自动执行此操作,而在播放音频流时它目前从未这样做过。我已经更新了问题以更清楚地说明这一点。 Windows 中没有 API 会在决定休眠之前选择性地忽略您的应用程序。但是,即使您的音频应用程序正在运行,您也可以强制系统进入睡眠状态。查看 api SetSuspendState 您也可以收听 WM_POWERBROADCAST 消息并停止从您的应用程序播放声音。

以上是关于允许计算机在从 Windows 应用程序播放音频时进入睡眠状态的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序在后台时在 Windows phone 8 中播放音频通知

一次只允许播放一个音频元素

从Particle Photon触发Android上的音频

pyqt5音频播放

Windows 8.1 背景音频播放器在应用程序的其他页面中不起作用

Java 在 Windows 上播放音频,但在 Ubuntu 上不播放