Обработчик AEInstallEventHandler не вызывается при запуске - PullRequest
1 голос
/ 25 ноября 2011

Я установил обработчик событий Apple для URL в моем приложении:

OSStatus e = AEInstallEventHandler( kInternetEventClass,
                            kAEGetURL,
                            NewAEEventHandlerUPP(AppleEventProc),
                            (SRefCon)this,
                            false);

И это работает, если мое приложение работает.Однако, если мое приложение НЕ запущено, нажатие URL-адреса в браузере запускает приложение, но событие Apple не получено в моем обработчике.Мой вызов AEInstallEventHandler находится на этапе запуска моего приложения, прежде чем он достигнет цикла сообщений.Это не первое, что я делаю, но не слишком далеко от этого.(Очевидно, я правильно настроил plist, так как я получаю события во время работы)

Есть какие-нибудь идеи о том, как заставить это работать?

Интересно, когда Chrome запускает мой для обработки почтового URLон передает «-psn_0_5100765» в командной строке.Что для меня ничего не значит, кто-нибудь знает, что он пытается мне сказать?

Примечание. Я настроил отладку Apple Event и снова запустил ее.Я определенно получаю отправленное событие GURL при запуске, после того как я установил обработчик обратного вызова.Однако я все еще не могу понять, почему мой обратный вызов не вызывается с этим событием.

1 Ответ

0 голосов
/ 08 июля 2016

Итак, у меня есть код, использующий ReceiveNextEvent:

    while
    (
        ReceiveNextEvent
        (
            0,
            NULL,
            0.001, // kEventDurationForever,
            kEventRemoveFromQueue,
            &theEvent
        )
        ==
        noErr
    )
    {
        SendEventToEventTarget(theEvent, theTarget);
        ReleaseEvent(theEvent);
    }   

, который вызывается несколько раз во время запуска приложения.Происходит обработка этих событий без учета необходимости вызывать AEProcessEvent для событий kEventAppleEvent.Это делается автоматически внутри RunApplicationEventLoop, но вам придется делать это вручную, если вы используете цикл ReceiveNextEvent.Поэтому я добавил это в свой цикл следующим образом:

    while
    (
        ReceiveNextEvent
        (
            0,
            NULL,
            0.001, // kEventDurationForever,
            kEventRemoveFromQueue,
            &theEvent
        )
        ==
        noErr
    )
    {
        if (GetEventKind(theEvent) == kEventAppleEvent)
            AEProcessEvent(theEvent);

        SendEventToEventTarget(theEvent, theTarget);
        ReleaseEvent(theEvent);
    }   

И теперь он работает при запуске И во время выполнения.

Ули Кустерер был ответственным зауказывая мне в правильном направлении.Огромное ему спасибо.

...