Piszę prostą aplikację na Mac, zaprojektowaną do działania w tle i wykonywania określonych czynności za każdym razem, gdy użytkownik kliknie przycisk myszy. Aplikacja jest napisana w Pythonie przy użyciu PyObjC. Używam addGlobalMonitorForEventsMatchingMask
oglądać na NSLeftMouseDown
zdarzeń:Monitorowanie zdarzeń globalnych NSEvent w tle
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler)
Ten kod działa doskonale podczas pracy w terminalu. Jednak gdy pakuję go jako samodzielną aplikację (za pomocą py2app), a następnie uruchamiam ją, aplikacja nie otrzymuje żadnych zdarzeń na początku. (A przynajmniej, jeśli tak, to nie uruchamia kodu w mojej metodzie obsługi). Tylko wtedy, gdy kliknę aplikację w Docku, zacznie odbierać zdarzenia, a po tym nadal będzie odbierać zdarzenia nawet po jego zakończeniu. powraca do tła. Ale nic nie otrzyma, dopóki nie zostanie aktywowana raz.
Moje pytanie brzmi: Jak mogę dostać moje app, aby rozpocząć odbieranie zdarzeń tak szybko jak to jest uruchomiony, bez konieczności najpierw zostać aktywowane poprzez kliknięcie ikony Dock? Czy jest to znane dziwactwo z NSEvents
, czy może coś jest nie tak z moją pętlą uruchamiania w PyObjC?
Każda pomoc lub wskazówki są mile widziane!
Edit: Na dalszych badań, wydaje się, że w rzeczywistości, moja aplikacja samoistnie rozpoczyna odbieranie powiadomień o dziesięć sekund po uruchomieniu, niezależnie od tego, czy ja go uaktywnić. Co jest nieco denerwujące, ale w porządku.
Jeśli jednak uruchomić aplikację z obu LSUIElement = true
lub LSBackgroundOnly = true
w moim Info.plist
(co ostatecznie chcą robić, ponieważ ta aplikacja powinna działać tylko w tle i nie pojawiają się w stacji dokującej), nigdy nie otrzymują powiadomień. Więc nadal tkwię.
Czy jesteś pewien, że ta linia jest uruchamiana po uruchomieniu aplikacji? – akaRem
Czy możesz opublikować [minimalny, kompletny, prawidłowy przykład] (http://stackoverflow.com/help/mcve), z którego inni mogą korzystać, aby odtworzyć i być może usunąć problem? – abarnert
Sprawdź, czy spełnia on wymagania AppStore'a. ale jeśli jest to do użytku osobistego, spróbuj z Xcode. chcesz przykład? –