第一次海报,温柔;-)
我正在编写一个作为Windows服务运行的音频应用程序(用C++编写),使用WASAPI从插孔中取样,并对其进行一些处理.
我注意到的一点是,当我的应用程序"正在录制"时,Windows不会自动暂停或休眠.
我已经注册了电源事件通知,如果我自己按下暂停按钮,我的服务会获得适当的电源事件并处理它们.如果我让系统自行暂停,则永远不会收到电源事件.
如果我删除了我引用WASAPI的代码位,则手动和自动挂起都会正常接收电源事件.所以似乎有一些关于使用WASAPI告诉Windows忽略自动挂起计时器的事情.
任何人都可以帮助解释这种行为,我有什么办法可以阻止它吗?我不希望我的应用程序成为行为不端并阻止系统暂停的应用程序之一.
不幸的是,没有任何机制可以做你想做的事情 - 打开一个音频流可以防止电源状态转换,就像在网络上打开文件一样,以及其他一些事情.
这是音频驱动程序(portcls.sys)而不是WASAPI的功能,并不是Vista的新行为 - 我相信XP和Win2K有类似的行为(虽然电源状态转换在Vista上比在XP上更可靠和Win2K所以用户往往更依赖他们).
在Windows 7上,您可以使用"powercfg -requests"查找系统的任何部分是否阻止计算机进入睡眠状态.有关这方面的更多信息,请点击此处