gpt4 book ai didi

objective-c - Finder 脚本桥接关闭

转载 作者:行者123 更新时间:2023-12-03 17:43:12 28 4
gpt4 key购买 nike

我尝试使用 Application Scripting Bridge 让我的 Mac 进入休眠状态。代码如下所示:

#import "Finder.h"
FinderApplication *Finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.finder"];
[Finder sleep];

但是这不起作用。有什么想法为什么它不起作用吗?没有编译错误或警告,但它不起作用......

最佳答案

正如我在 this answer 中发布的那样,我使用以下代码已有 8 年多了,没有出现任何问题:

MDRestartShutdownLogout.h:

#import <CoreServices/CoreServices.h>
/*
* kAERestart will cause system to restart
* kAEShutDown will cause system to shutdown
* kAEReallyLogout will cause system to logout
* kAESleep will cause system to sleep
*/
extern OSStatus MDSendAppleEventToSystemProcess(AEEventID eventToSend);

MDRestartShutdownLogout.m:

#import "MDRestartShutdownLogout.h"

OSStatus MDSendAppleEventToSystemProcess(AEEventID eventToSendID) {
AEAddressDesc targetDesc;
static const ProcessSerialNumber kPSNOfSystemProcess = {0, kSystemProcess };
AppleEvent eventReply = {typeNull, NULL};
AppleEvent eventToSend = {typeNull, NULL};

OSStatus status = AECreateDesc(typeProcessSerialNumber,
&kPSNOfSystemProcess, sizeof(kPSNOfSystemProcess), &targetDesc);

if (status != noErr) return status;

status = AECreateAppleEvent(kCoreEventClass, eventToSendID,
&targetDesc, kAutoGenerateReturnID, kAnyTransactionID, &eventToSend);

AEDisposeDesc(&targetDesc);

if (status != noErr) return status;

status = AESendMessage(&eventToSend, &eventReply,
kAENormalPriority, kAEDefaultTimeout);

AEDisposeDesc(&eventToSend);
if (status != noErr) return status;
AEDisposeDesc(&eventReply);
return status;
}

注意,上面的代码是基于Technical Q&A QA1134中的代码,但我的被重新设计为使用 AESendMessage() 而不是 AESend()AESend() 位于 HIToolbox.framework 中,而 HIToolbox.framework 位于 Carbon.framework 中,因此不可用于 64 位应用程序。 (AESendMessage()CoreServicesAE.framework 的一部分)。

关于objective-c - Finder 脚本桥接关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271300/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com