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

Posted

技术标签:

【中文标题】检测笔记本电脑停靠或未停靠 Windows 7+【英文标题】:Detect laptop docked or undocked Windows 7+ 【发布时间】:2016-10-04 20:29:44 【问题描述】:

我有一台运行 Windows 7 的笔记本电脑,但最终可能会迁移到 Windows 10。我想拥有自己的实用程序来检测笔记本电脑何时对接或取消对接,然后更改电源配置文件设置。我已经将它设置为在标准电源 Windows 配置文件中由电池供电而不是 AC 供电时执行我想要的操作,但是当笔记本电脑在扩展坞上时,我想要一个不同的电源计划,而不是它刚刚插入 AC 适配器和不在扩展坞上。

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

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

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

【问题讨论】:

如果您的扩展坞提供电源,consider monitoring the AC Line Status. @user4581301:谢谢,但是当我在家时,我也通过电源砖提供交流电源。问题是 Windows 涵盖了一个 DC 案例,但我有两个单独的 AC 案例,我试图以不同的方式处理。当不在坞站时,来自坞站的一个交流电和一个来自电源砖的交流电。这可能看起来很傻,但我希望大显示器屏幕在工作时保持在工作状态,以在我的工作台上显示屏幕保护程序上的时间。当我在家时,我希望笔记本电脑的屏幕进入睡眠状态,这样在我的主 PC 上玩游戏或其他东西时,我不会从眼角看到它。 一个老问题,但如果有人来到这里,github.com/manutalcual/winredock 你有资源可以做到这一点。顺便说一句,我做了那个软件。 【参考方案1】:

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

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

2) 笔记本电脑已对接至扩展坞

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

对于我的 DELL 笔记本电脑+坞站设置,“HID-Complaint*”设备在对接时始终存在,而在未对接时则丢失。我曾尝试使用 CM_Is_Dock_Station_Present 和 GetCurrentHwProfile,但两者都无法正确报告停靠状态。

【讨论】:

以上是关于检测笔记本电脑停靠或未停靠 Windows 7+的主要内容,如果未能解决你的问题,请参考以下文章

QT FramelessWindowHint Windows 7 停靠在一边

停靠栏显示或隐藏时的事件

UITableView 检测section header的停靠和脱离

MFC 停靠窗口及其停靠位置

在 Windows 窗体应用程序上停靠和锚定

标签页 Windows 窗体内的用户控件停靠栏