0

Application Scripting Bridgeを使用して、Macをスリープ状態にしようとしました。コードは次のようになります。

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

しかし、それは機能しません。それが機能しない理由はありますか?コンパイルエラーや警告はありませんが、機能しません…</ p>

4

2 に答える 2

2

この回答に投稿したように、次のコードを 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()あるため、64 ビット アプリでは使用できません。(は の一部です) 。HIToolbox.frameworkCarbon.frameworkAESendMessage()AE.frameworkCoreServices

于 2011-06-08T18:49:24.903 に答える
0

Scripting Bridge では、Mac のシャットダウンなど、アプリケーション固有でないことを行うのに十分でない場合は、Applescript (ひいては Scripting Bridge) が直接アクセスできない他のフレームワークに移行する余裕があります。Mac のシャットダウンについては、コア サービス:テクニカル Q&A QA1134: プログラムによって再起動、シャットダウン、および/またはログアウトを引き起こすを参照してください。

于 2011-06-08T18:24:28.253 に答える