【问题标题】:What is the notification when the number of monitors changes?监视器数量变化时的通知是什么?
【发布时间】:2016-02-19 03:08:42
【问题描述】:

我很好奇,当系统中的监视器数量发生变化时,广播的Win32通知是什么?我以为是WM_DISPLAYCHANGE,但我错了。

【问题讨论】:

    标签: c++ c windows winapi


    【解决方案1】:

    这很容易通过Microsoft Spy++ 进行检查。在我的情况下,我检查了 Windows 7 x64,连接了两台显示器,然后关闭并再次打开第二台显示器。

    删除监视器时,您会看到WM_DISPLAYCHANGE,但添加监视器时不会。

    您将看到WM_DEVICECHANGEDBT_DEVNODES_CHANGED(在RegisterDeviceNotification 之后)。

    对于SPI_SETWORKAREASPI_ICONVERTICALSPACING,您将看到WM_SETTINGCHANGE

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

    【讨论】:

    • 我能想到的一个极端情况是添加一个显示器来镜像显示而不是扩展它。如果工作区没有变化,它还会得到SPI_SETWORKAREA 吗?
    • @indiv 我不知道。结果来自我刚刚进行的测试。您可以使用 Spy++ 轻松检查自己。如果我猜的话,我希望看到 UxdDisplayChangeMes​​sage、HotplugDetected 和 WM_DEVICECHANGE,但不会看到 WM_DISPLAYCHANGE 和 WM_SETTINGCHANGE。
    • @WernerHenze:谢谢。 WM_SETTINGCHANGEwParam == SPI_SETWORKAREA 似乎可以在所有操作系统上添加和删除显示器,直到 XP。不过,我不确定您提出的其他解决方案。如果 Spy++ 显示了某些东西,并不意味着它是一种记录在案的方法。
    • 无法显示任何这些消息。 :(
    • @Adrian 我建议打开一个新问题,在其中提供代码并在此处引用此问题。
    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 2013-06-08
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多