Search code examples
macosbrightness

How to change screen brightness in Mac os x?


I am working on Safari Plugin (Objective c). I want to change screen brightness from my plugin. I have tried it with "IODisplayGetFloatParameter" and "IODisplaySetFloatParameter". But it is giving me error "failed to get brightness of display 0x1b5098cc (error -536870201)". How to solve this bug?


Solution

  • Here is the answer from thread Adjust Mac display brightness Objective-C?

    // almost completely from: http://mattdanger.net/2008/12/adjust-mac-os-x-display-brightness-from-the-terminal/
    - (float) get_brightness {
        CGDirectDisplayID display[kMaxDisplays];
        CGDisplayCount numDisplays;
        CGDisplayErr err;
        err = CGGetActiveDisplayList(kMaxDisplays, display, &numDisplays);
    
        if (err != CGDisplayNoErr)
            printf("cannot get list of displays (error %d)\n",err);
        for (CGDisplayCount i = 0; i < numDisplays; ++i) {
    
    
            CGDirectDisplayID dspy = display[i];
            CFDictionaryRef originalMode = CGDisplayCurrentMode(dspy);
            if (originalMode == NULL)
                continue;
            io_service_t service = CGDisplayIOServicePort(dspy);
    
            float brightness;
            err= IODisplayGetFloatParameter(service, kNilOptions, kDisplayBrightness,
                                            &brightness);
            if (err != kIOReturnSuccess) {
                fprintf(stderr,
                        "failed to get brightness of display 0x%x (error %d)",
                        (unsigned int)dspy, err);
                continue;
            }
            return brightness;
        }       
        return -1.0;//couldn't get brightness for any display
    }
    
    
    // almost completely from: http://mattdanger.net/2008/12/adjust-mac-os-x-display-brightness-from-the-terminal/
    - (void) set_brightness:(float) new_brightness {
        CGDirectDisplayID display[kMaxDisplays];
        CGDisplayCount numDisplays;
        CGDisplayErr err;
        err = CGGetActiveDisplayList(kMaxDisplays, display, &numDisplays);
    
        if (err != CGDisplayNoErr)
            printf("cannot get list of displays (error %d)\n",err);
        for (CGDisplayCount i = 0; i < numDisplays; ++i) {
    
    
            CGDirectDisplayID dspy = display[i];
            CFDictionaryRef originalMode = CGDisplayCurrentMode(dspy);
            if (originalMode == NULL)
                continue;
                    io_service_t service = CGDisplayIOServicePort(dspy);
    
            float brightness;
            err= IODisplayGetFloatParameter(service, kNilOptions, kDisplayBrightness,
                                            &brightness);
            if (err != kIOReturnSuccess) {
                fprintf(stderr,
                        "failed to get brightness of display 0x%x (error %d)",
                        (unsigned int)dspy, err);
                continue;
            }
    
            err = IODisplaySetFloatParameter(service, kNilOptions, kDisplayBrightness,
                                             new_brightness);
            if (err != kIOReturnSuccess) {
                fprintf(stderr,
                        "Failed to set brightness of display 0x%x (error %d)",
                         (unsigned int)dspy, err);
                continue;
            }
    
            if(brightness > 0.0){
            }else{
            }
        }       
    
    }