检测笔记本电脑停靠或取消停靠Windows 7+

时间:2016-10-04 20:29:45

标签: c++ windows visual-c++ power-management

我有一台运行Windows 7的笔记本电脑,但最终可能会迁移到Windows 10.我希望拥有自己的实用程序来检测笔记本电脑何时停靠或取消停靠,然后更改电源配置文件设置。在标准电源Windows配置文件中,电池与AC相比,我已经准备好了我想做的事情,但是当笔记本电脑在扩展坞上而不是只是插入AC适配器时,我想要一个不同的电源计划。不在扩展坞上。

到目前为止,我有一个工作程序,它只在系统托盘中只有一个小图标启动,当它停靠与取消停靠时它将进行我想要的更改,但方式我'确定笔记本电脑已停靠是通过在WM_DEVICECHANGE发生时通过EnumDisplayDevices调用查找已连接到我的扩展坞的特定硬编码监视器名称(例如“Samsung U32D970Q”)。

主要问题是如果我更换了显示器,那么程序将停止工作。我可以在启动时将参数传递给程序,并使用要查找的监视器的名称,但我试图找出是否有更好的方法。我这样做是愚蠢的吗?

是否有一些Windows 7+功能,操作系统可以判断笔记本电脑是否在扩展坞上?

1 个答案:

答案 0 :(得分:0)

我在尝试确定笔记本电脑是否已停靠时遇到了类似的问题。我的最终目标是将笔记本电脑电源从扩展坞连接到智能插头,并使用Google Home Assistant通过语音命令打开/关闭笔记本电脑。要在交流电源恢复时打开笔记本电脑,您需要在BIOS中启用“Wake On AC”。问题是当AC切断时,笔记本电脑仍将继续使用电池供电。我需要一种后台任务的方法来在满足这些条件时正确关闭Windows:

1)笔记本电脑的电源已从AC更改为DC

2)笔记本电脑已停靠在扩展坞上

以上条件可确保笔记本电脑在我取消停靠时不会关机。笔记本电脑停靠时,我发现设备管理器中存在额外的设备。我的解决方案是在停靠/取消停靠时枚举所有设备,并将结果保存到两个文本文件,并使用windiff比较它们以查看差异。只需使用一个或两个“额外设备”差异来确定笔记本电脑是否已停靠。

对于我的DELL笔记本电脑+扩展坞设置,“HID-Complaint *”设备在停靠时始终存在,并且在取消停靠时丢失。我尝试过使用CM_Is_Dock_Station_Present和GetCurrentHwProfile,但都没有正确报告停靠状态。