Skip to content

Instantly share code, notes, and snippets.

@AiziChen
Last active July 16, 2024 03:07
Show Gist options
  • Save AiziChen/6d5e75f36084cb2e2fda84e110375d6b to your computer and use it in GitHub Desktop.
Save AiziChen/6d5e75f36084cb2e2fda84e110375d6b to your computer and use it in GitHub Desktop.
Get display name and display mode from NSScreen
//
// MainMonitor.swift
// swift-test-app
//
// Created by quanye on 10/26/21.
//
extension NSScreen {
/**
Get the monitor name of `Screen`
- Returns: monitor name
*/
@objc func monitorName() -> String? {
guard let displayID =
deviceDescription[NSDeviceDescriptionKey(rawValue: "NSScreenNumber")] as? CGDirectDisplayID else {
return nil
}
guard let info = CoreDisplay_DisplayCreateInfoDictionary(displayID).takeRetainedValue() as? [String: AnyObject] else {
return nil
}
if let productName = info["DisplayProductName"] as? [String: String] {
return productName["en_US"]
}
return nil
}
/**
Get the monitor type by monitor name
- Parameter name: monitor name
- Returns: monitor-type
*/
@objc func monitorType() -> MonitorType? {
let rs = MonitorType()
guard let displayID =
deviceDescription[NSDeviceDescriptionKey(rawValue: "NSScreenNumber")] as? CGDirectDisplayID else {
return nil
}
guard let info = CoreDisplay_DisplayCreateInfoDictionary(displayID).takeRetainedValue() as? [String: AnyObject] else {
return nil
}
if let productName = info["DisplayProductName"] as? [String: String],
let monitorName = productName["en_US"] {
rs.name = monitorName
let isMain = CGDisplayIsMain(displayID)
let isBuiltIn = CGDisplayIsBuiltin(displayID)
let isHardwareMirror = CGDisplayIsInHWMirrorSet(displayID)
if (isMain == 1 && isBuiltIn == 1 && isHardwareMirror == 0) {
// 内建屏幕,并且没有扩展
rs.mode = "内建屏幕,无模式"
} else if (isMain == 0 && isBuiltIn == 0 && isHardwareMirror == 0) {
// 外接屏幕,且为扩展模式
rs.mode = "外接屏幕,扩展模式"
} else if (isMain == 0 && isBuiltIn == 1 && isHardwareMirror == 0) {
// 内建屏幕,且为扩展模式
rs.mode = "内建屏幕,扩展模式"
} else if (isMain == 0 && isBuiltIn == 0 && isHardwareMirror == 1) {
// 外接屏幕,复制模式
rs.mode = "外接屏幕,复制模式"
} else if (isMain == 1 && isBuiltIn == 0 && isHardwareMirror == 0) {
rs.mode = "外接屏幕,无模式"
} else if (isMain == 1 && isBuiltIn == 0 && isHardwareMirror == 1) {
rs.mode = "外接屏幕,复制模式"
} else {
rs.mode = "未知"
}
}
return rs;
}
}
public class MonitorType: NSObject {
var name: String?
var mode: String?
@objc func getName() -> String? {
return name
}
@objc func getMode() -> String? {
return mode
}
}
public class CheckMonitor: NSObject {
/**
获取所有的显示器名列表
- Returns: monitors list
*/
@objc public func allMonitorNames() -> NSMutableArray {
let rs = NSMutableArray()
for screen in NSScreen.screens {
if let name = screen.monitorName() {
rs.add(name)
}
}
return rs
}
/**
是否为主显示器?
- Parameter name: 显示器名
- Returns: true if is main-monitor, or else is not
*/
@objc public func isMainMonitor(_ name: String) -> Bool {
return NSScreen.main?.monitorName() == name
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment