Nik*_*bak 1 macos cocoa objective-c
我有一个应用程序实用程序,当没有用户时,它变得无用.因此,为了节省资源,我希望知道何时/是否处于睡眠状态.
这是一篇关于苹果唤醒/睡眠通知的专门文章,但它只涉及计算机睡眠而不是显示睡眠.
当显示器处于睡眠状态时,有没有办法让应用程序"休眠"?
谢谢
DisplayWrangler服务发送显示器何时关闭的通知:
// Doesn't include error checking - just a quick example
io_service_t displayWrangler;
IONotificationPortRef notificationPort;
io_object_t notification;
displayWrangler = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceNameMatching("IODisplayWrangler");
notificationPort = IONotificationPortCreate(kIOMasterPortDefault);
IOServiceAddInterestNotification(notificationPort, displayWrangler, kIOGeneralInterest, displayPowerNotificationsCallback, NULL, ¬ification);
CFRunLoopAddSource (CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notificationPort), kCFRunLoopDefaultMode);
IOObjectRelease (displayWrangler);
Run Code Online (Sandbox Code Playgroud)
然后回调看起来像这样:
void displayPowerNotificationsCallback(void *refcon, io_service_t service, natural_t messageType, void *messageArgument)
{
switch (messageType) {
case kIOMessageDeviceWillPowerOff :
// This is called twice - once for display dim event, then once
// for display power off
break;
case kIOMessageDeviceHasPoweredOn :
// Display powering back on
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这是对前一个问题的回答 - 但我认为添加我的答案会很有用.
显示唤醒和睡眠时NSWorkspace有几个通知:NSWorkspaceScreensDidSleepNotification和NSWorkspaceScreensDidWakeNotification