如何使用 Swift 以编程方式让 Mac 进入睡眠状态
How to put Mac to sleep programmatically with Swift
我正在编写一个程序,让我的 MacBook Pro 在应用程序打开时进入睡眠状态,但我似乎无法弄清楚。我不知道这是否与电源管理有关,但据我发现,它与 IOKit.pwr_mgt 有关。您的帮助将不胜感激!下面的代码只是如何启用睡眠模式而不是让计算机进入睡眠模式。我还找到了 applicationDidFinishLaunching 函数,所以代码在该函数中。
var assertionID: IOPMAssertionID = 0
var success = IOPMAssertionRelease(assertionID)
与电源管理无关。实际上,您需要 运行 应用脚本。
完成此操作的最简单方法是首先禁用您的应用程序沙盒功能。
接下来转到您的应用 info.plist
并添加 NSAppleEventsUsageDescription
密钥和描述,例如 "This app needs your permission to put the display to sleep."
.
现在您只需要执行一个 Apple 脚本,告诉应用程序系统事件进入休眠状态。 "tell application \"System Events\" to sleep"
:
创建一个方法来执行该脚本:
func startScreenSleep() {
let script = "tell application \"System Events\" to sleep"
guard let appleScript = NSAppleScript(source: script) else { return }
var error: NSDictionary?
appleScript.executeAndReturnError(&error)
if let error = error {
print(error[NSAppleScript.errorAppName] as! String)
print(error[NSAppleScript.errorBriefMessage] as! String)
print(error[NSAppleScript.errorMessage] as! String)
print(error[NSAppleScript.errorNumber] as! NSNumber)
print(error[NSAppleScript.errorRange] as! NSRange)
}
}
并从您的 ViewController 的 viewDidLoad
方法中调用它:
override func viewDidLoad() {
super.viewDidLoad()
startScreenSleep()
}
我正在编写一个程序,让我的 MacBook Pro 在应用程序打开时进入睡眠状态,但我似乎无法弄清楚。我不知道这是否与电源管理有关,但据我发现,它与 IOKit.pwr_mgt 有关。您的帮助将不胜感激!下面的代码只是如何启用睡眠模式而不是让计算机进入睡眠模式。我还找到了 applicationDidFinishLaunching 函数,所以代码在该函数中。
var assertionID: IOPMAssertionID = 0
var success = IOPMAssertionRelease(assertionID)
与电源管理无关。实际上,您需要 运行 应用脚本。
完成此操作的最简单方法是首先禁用您的应用程序沙盒功能。
接下来转到您的应用 info.plist
并添加 NSAppleEventsUsageDescription
密钥和描述,例如 "This app needs your permission to put the display to sleep."
.
现在您只需要执行一个 Apple 脚本,告诉应用程序系统事件进入休眠状态。 "tell application \"System Events\" to sleep"
:
创建一个方法来执行该脚本:
func startScreenSleep() {
let script = "tell application \"System Events\" to sleep"
guard let appleScript = NSAppleScript(source: script) else { return }
var error: NSDictionary?
appleScript.executeAndReturnError(&error)
if let error = error {
print(error[NSAppleScript.errorAppName] as! String)
print(error[NSAppleScript.errorBriefMessage] as! String)
print(error[NSAppleScript.errorMessage] as! String)
print(error[NSAppleScript.errorNumber] as! NSNumber)
print(error[NSAppleScript.errorRange] as! NSRange)
}
}
并从您的 ViewController 的 viewDidLoad
方法中调用它:
override func viewDidLoad() {
super.viewDidLoad()
startScreenSleep()
}