winapi - 在 Windows 7 下检测连接或移除的外部显示器

标签 winapi events notifications external-display hotplugging

每次在运行 Windows 7 的笔记本电脑上插入或拔出外部 LCD 显示器时,我是否可以接收或 Hook 某些事件或通知?

笔记本电脑检测到这一点,并通过某些类型的调整大小或重新定位将我的显示器切换到外部屏幕并返回,但这是否由操作系统公开,以便应用程序可以提供处理程序、附加脚本等?

如果没有,是否有我可以不时轮询的注册表设置或 API?

(我更喜欢编程C + Win32 API)

更新

迈克的回答如下,WM_DEVICECHANGE带我到RegisterDeviceNotification() ,但到目前为止我正在努力实现它......

更新2

这个问题已经用不同的措辞被问过几次,但在我看来还没有完全回答:

最佳答案

根据this article当显示分辨率更改以及添加或删除显示器时,Windows 会发送 WM_DISPLAYCHANGE 消息。

如果您需要对由于添加或删除显示器而导致的桌面尺寸变化使用react,您可以在此消息的处理程序中执行此操作。 LPARAM 为您提供窗口所在显示器的新分辨率。请注意,如果您使用 100% 以外的任何值进行系统 DPI 缩放,并且您的程序不是 DPI-aware,则该分辨率将会缩放。 .

或者使用EnumDisplayMonitors函数获取每个连接的显示器的显示分辨率以及显示器在虚拟桌面中的相对位置。无论 DPI 缩放如何,此函数都使用真实设备像素值。

关于winapi - 在 Windows 7 下检测连接或移除的外部显示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5981520/

相关文章:

c++ - 控制鼠标运动

C++ WinAPI 读取进程内存

c++ - ShellExecute 在_beginthread

c# - 事件 - 处理程序与直接访问?为什么?

python - Tkinter .after 方法卡住窗口?

android - KitKat 上未显示 HeadsUp 通知

javascript - 如何打开弹出窗口并使其从工具栏闪烁?

android - Android O 中未设置 Firebase Cloud Messaging 后台通知 channel ID

c++ - 为什么消息循环不会阻止 Windows 应用程序中的 GUI,但在 Qt 中会阻止?

javascript - 如何使用 Javascript 捕捉 youtube 视频播放器的播放/暂停事件?