Search code examples
objective-ccocoamacossleep

Programmatically put a Mac into sleep


I can't find any instructions how to put a Mac programmatically into sleep mode (in Objective-C). I'm sure it should be only one line, but could you give me a hint?


Solution

  • #include <stdio.h> 
    #include <CoreServices/CoreServices.h>
    #include <Carbon/Carbon.h>
    
    SendAppleEventToSystemProcess(kAESleep);
    
    OSStatus SendAppleEventToSystemProcess(AEEventID EventToSend)
    {
        AEAddressDesc targetDesc;
        static const ProcessSerialNumber kPSNOfSystemProcess = { 0, kSystemProcess };
        AppleEvent eventReply = {typeNull, NULL};
        AppleEvent appleEventToSend = {typeNull, NULL};
    
        OSStatus error = noErr;
    
        error = AECreateDesc(typeProcessSerialNumber, &kPSNOfSystemProcess, 
                                                sizeof(kPSNOfSystemProcess), &targetDesc);
    
        if (error != noErr)
        {
            return(error);
        }
    
        error = AECreateAppleEvent(kCoreEventClass, EventToSend, &targetDesc, 
                       kAutoGenerateReturnID, kAnyTransactionID, &appleEventToSend);
    
        AEDisposeDesc(&targetDesc);
        if (error != noErr)
        {
            return(error);
        }
    
        error = AESend(&appleEventToSend, &eventReply, kAENoReply, 
                      kAENormalPriority, kAEDefaultTimeout, NULL, NULL);
    
        AEDisposeDesc(&appleEventToSend);
        if (error != noErr)
        {
            return(error);
        }
    
        AEDisposeDesc(&eventReply);
    
        return(error); 
    }
    

    More detail on https://developer.apple.com/library/content/qa/qa1134/_index.html