Jest ładne narzędzie lsappinfo, które pozwala robić takie rzeczy, jak monitorowanie przełączania aplikacji. Chciałbym napisać program, który działa lsappinfo listen
i podejmuje działania, gdy zmienia się aplikacja na pierwszym planie (w szczególności zmienia kolory LED na mojej nowej klawiaturze).
Czy ktoś wie, jaki jest format serializacji używany przez lsappinfo? To wygląda tak:
$ lsappinfo listen +becameFrontmost forever
Notification: kLSNotifyBecameFrontmost time=10/18/2017 06:58:18.843 dataRef={ "ApplicationType"="Foreground", "CFBundleIdentifier"="com.google.Chrome", "LSASN"=ASN:0x0-0x10010:, "LSFrontApplicationSeed"=3367, "LSMenuBarOwnerApplicationSeed"=3270, "LSMenuBarOwnerASN"=ASN:0x0-0x10010:, "LSOtherASN"=ASN:0x0-0x2f52f5: } affectedASN="Google Chrome" ASN:0x0-0x10010: context=0x0 sessionID=186a6 notificationID=0x7fb529d00a90
Notification: kLSNotifyBecameFrontmost time=+0.835684s dataRef={ "ApplicationType"="Foreground", "CFBundleIdentifier"="org.gnu.Emacs", "LSASN"=ASN:0x0-0x2f52f5:, "LSFrontApplicationSeed"=3368, "LSMenuBarOwnerApplicationSeed"=3271, "LSMenuBarOwnerASN"=ASN:0x0-0x2f52f5:, "LSOtherASN"=ASN:0x0-0x10010: } affectedASN="Emacs" ASN:0x0-0x2f52f5: context=0x0 sessionID=186a6 notificationID=0x7fb529d00a90
Mam na myśli, że mogę to przeanalizować za pomocą wyrażenia regularnego szukającego tylko pola, które chcę, ale byłoby lepiej, gdybyśmy mogli przekazać je do jakiejś biblioteki, zamiast używać hackiego regexa, który mógłby zawieść, gdyby dane wyglądały dziwnie. Czy jest to jakiś standardowy format serializacji wewnętrznych systemów MacOS, o którym nie słyszałem, czy jest to coś, co stworzyli tylko dla tego narzędzia?
Odpowiedzi:
Nie musisz tego robić - jest w nim klon otwartego źródła http://newosxbook.com/tools/lsdtrip.html które mogą dostarczyć podstawowych wywołań API używanych przez Apple.
źródło