首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Finder脚本桥关闭

Finder脚本桥关闭
EN

Stack Overflow用户
提问于 2011-06-08 04:35:48
回答 2查看 1.3K关注 0票数 0

我尝试使用应用程序脚本桥来让我的Mac进入睡眠状态。代码如下所示:

代码语言:javascript
复制
#import "Finder.h"
 FinderApplication *Finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.finder"];
        [Finder sleep];

但它不起作用。你知道为什么它不起作用吗?没有编译错误或警告,但它不工作…

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-09 02:49:25

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

MDRestartShutdownLogout.h:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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,而Carbon.framework使用的是64位应用程序。(AESendMessage()CoreServicesAE.framework的一部分)。

票数 2
EN

Stack Overflow用户

发布于 2011-06-09 02:24:28

如果Scripting Bridge不足以做一些非特定于应用程序的事情,比如关闭Mac,那么你可以转移到Applescript (扩展为Scripting Bridge)不能直接访问的其他框架。有关关闭Mac的信息,请参阅核心服务:Technical Q&A QA1134: Programmatically causing restart, shutdown and/or logout

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6271300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档