You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

捕获外接显示器连接事件:Windows与macOS系统消息问询

Windows 和 macOS 外接显示器连接/移除时的系统消息说明

Windows 系统

  • 当外接显示器连接、移除,或是显示配置(比如主显示器切换、分辨率/DPI变更)变动时,系统会给所有顶层窗口发送 WM_DISPLAYCHANGE 消息,消息里会附带新的分辨率、颜色深度等显示参数。
  • 对应你提到的两个场景:
    • 本地显示器启动程序退出后,连接第二台显示器设为主显示器:后续启动程序时,程序可以通过初始化时查询当前显示配置,或者监听WM_DISPLAYCHANGE消息来适配新主显示器的参数。
    • 外接显示器启动应用关闭后,移除显示器再在小尺寸/DPI的本地显示器启动程序:程序启动时会读取当前屏幕的配置信息,要是程序做了适配逻辑,会自动调整UI;如果之前的应用保存过窗口位置,可能需要通过WM_DISPLAYCHANGE修正位置,避免窗口超出屏幕范围。
  • 另外,Windows 10及以上版本针对DPI变化,还会发送 WM_DPICHANGED 消息,专门通知窗口DPI变更,方便程序调整UI缩放比例。

macOS 系统

  • macOS 在显示器连接、移除或显示配置变更时,会通过Notification Center发送 NSApplicationDidChangeScreenParametersNotification 通知,只要应用注册了这个通知就能收到。
  • 同时,AppKit框架下的窗口会自动触发 windowDidChangeScreen(_:) 委托方法,用来处理屏幕变更事件。
  • 对应你的场景:
    • 切换主显示器后启动程序:程序启动时会获取当前主屏幕的尺寸、DPI等参数,支持适配的程序会自动调整UI;如果之前保存过窗口状态,也可以通过监听上述通知来修正窗口的位置和大小。
    • 移除外接显示器后在本地小屏幕启动程序:程序初始化时会读取当前屏幕的配置,要是有屏幕变更处理逻辑,会自动适配小尺寸/DPI的屏幕,避免UI错位或者超出显示范围。
  • 要是用SwiftUI开发应用,可以通过@Environment(\.screen)或者监听NSApplication.didChangeScreenParametersNotification来响应屏幕变化。

内容的提问来源于stack exchange,提问作者Igor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:22:34