Adjust screen brightness in Mac OS X app

2019-02-14 12:47发布

问题:

I want to control the brightness of the main-screen within my Mac OS X app (like the F1/F2 buttons). In iOS, there's something like this:

UIScreen.mainScreen().brightness = CGFloat(0.5)

In OSX we have NSScreen, which is nice to find out what the main-screen is, but it misses the .brightness method.

So how can I adjust the monitor brightness using Swift on OSX?

回答1:

There's no such nice API for doing this on OS X.

We have to use IOServiceGetMatchingServices to find "IODisplayConnect" (the display device) then use the kIODisplayBrightnessKey to set the brightness:

func setBrightnessLevel(level: Float) {

    var iterator: io_iterator_t = 0

    if IOServiceGetMatchingServices(kIOMasterPortDefault, IOServiceMatching("IODisplayConnect"), &iterator) == kIOReturnSuccess {

        var service: io_object_t = 1

        while service != 0 {

            service = IOIteratorNext(iterator)
            IODisplaySetFloatParameter(service, 0, kIODisplayBrightnessKey, level)
            IOObjectRelease(service)

        }

    }
}

setBrightnessLevel(0.5)