tam*_*gal 8 macos cocoa sleep objective-c
我找不到任何有关如何将Mac以编程方式置于睡眠模式的指令(在Objective-C中).我敢肯定它应该只有一行,但你可以给我一个提示吗?
#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);
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请访问https://developer.apple.com/library/content/qa/qa1134/_index.html
小智 8
您还可以使用脚本桥.草案代码是
SystemEventsApplication *systemEvents = [SBApplication applicationWithBundleIdentifier:@"com.apple.systemevents"];
[systemEvents sleep];
Run Code Online (Sandbox Code Playgroud)
汤姆是对的.如果显示器处于休眠状态,AE方法将失败.pmset sleepnow 100%工作.
NSTask *pmsetTask = [[NSTask alloc] init];
pmsetTask.launchPath = @"/usr/bin/pmset";
pmsetTask.arguments = @[@"sleepnow"];
[pmsetTask launch];
Run Code Online (Sandbox Code Playgroud)
您可以使用AppleScript
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:@"tell application \"System Events\" to sleep"];
NSDictionary *errorInfo;
[script executeAndReturnError:&errorInfo];
[script release];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3776 次 |
最近记录: |