10

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

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

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

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

更新

迈克在下面的回答WM_DEVICECHANGE让我明白了RegisterDeviceNotification(),但到目前为止我一直在努力实现它......

更新 2

这个问题已经用不同的措辞问了几次,但我认为还没有完全回答:

4

3 回答 3

6

根据这篇文章WM_DISPLAYCHANGE,当显示分辨率发生变化以及添加或删除显示器时,Windows 会发送消息。

如果您需要对由于监视器添加或删除而导致的桌面大小更改做出反应,您可以在此消息的处理程序中执行此操作。LPARAM为您提供窗口所在显示器的新分辨率。请注意,如果您对系统 DPI 缩放使用 100% 以外的任何值,并且您的程序不支持DPI ,则此分辨率将被缩放。

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

于 2015-08-20T09:35:07.437 回答
3

您可以尝试WM_DEVICECHANGE。如果这不起作用,请运行您的窗口并将 Spy++ 附加到它,这将记录它收到的所有窗口消息。然后插入显示器并检查是否收到任何消息。

或者,您可以使用 SM_CMONITORS轮询GetSystemMetrics() 。

于 2011-05-12T16:50:55.047 回答
0

正如这里所说:

您将看到已注册的消息“UxdDisplayChangeMes​​sage”和“HotplugDetected”(仅在添加监视器时出现第二条消息)。您可以使用RegisterWindowMessage来获取这些消息的标识符。

您还可以查看其他消息,只需查看链接的答案即可。

于 2015-11-17T16:52:42.157 回答