2009-11-01 20 views
13

Stworzyłem aplikację kakao NSStatusBar, która znajduje się na pasku stanu systemu.Kakao NSStatusBar Global HotKey

Chcę przypisać klawisz skrótu, aby po naciśnięciu przełączać moje aplikacje i wyświetlać menu.

Czy to możliwe ?, Podczas wyszukiwania i eksperymentowania znalazłem kilka różnych sposobów przypisywania globalnych klawiszy skrótu, które można nacisnąć, gdy aplikacja jest w tle, ale nie mogę znaleźć żadnego sposobu na problematyczne sprawienie, aby menu pokazać.

Czy to możliwe ?, Jeśli ktoś uważa, że ​​najlepszym sposobem jest przypisanie globalnego skrótu, należy go opublikować.

Dzięki.


Jednym skrótu samouczków znalazłem na http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/ dla wszystkich zainteresowanych.

+0

Nie ma powodu, aby wyświetlać menu, chyba że zostało kliknięte lub "oderwane". –

Odpowiedz

11

Istnieje an actual hotkey API, który nadal istnieje w systemie Snow Leopard i jest dostępny w wersji 64-bitowej. Został zaprojektowany specjalnie do tego celu, w przeciwieństwie do metod NSEvent, które są w zasadzie tylko blokowymi opcjami wokół CGEventTaps.

Różnica polega na tym, że metody NSEvent (lub CGEventTaps bezpośrednio) sprawi, że wyglądają na każdy zdarzenia, który przychodzi, natomiast tylko API skrótu nazywa swoją funkcję, gdy użytkownik naciśnie swoją skrótu.

+0

Dziękujemy, że działa świetnie. Czy wiesz, czy można otworzyć menu aplikacji za pomocą kodu? – Craig

+0

Craig: Tak. Zobacz komentarz Dave'a DeLong'a na temat jego odpowiedzi. –

+0

JFYI: Apple już teraz uznaje te metody za przestarzałe, więc nie powinny już być używane –

17

Jeśli masz kierowanie na 10.6 lub więcej, dostępny jest nowy interfejs API dla NSEvent, który może wykonywać globalne skróty klawiszowe. Aby uzyskać więcej informacji, sprawdź na tej niesamowitej blogu: http://cocoakids.net/global-hotkeys-in-cocoa-on-snow-leopard

EDIT (długo później)

Tooting mój własny róg nieco: nigdy nie mogłem dostać rzeczy jak PTHotKey i innych bibliotek pracować drogę Spodziewałem się, więc ostatecznie zrezygnowałem i napisałem własne opakowanie HotKey. Ma bardzo prosty API (dajesz mu klucz kodowy, modyfikatory, cel i akcję), który wspiera nawet zabawne rzeczy, takie jak bloki 10.6. Możesz pobrać źródło tutaj: http://github.com/davedelong/DDHotKey

+0

Dzięki za post na blogu, działa świetnie, ale myślę, że użyję drugiego przykładu, aby działał w wersji 10.5, czy wiesz, czy można otworzyć menu aplikacji za pomocą kodu? – Craig

+0

@Craig możesz zrobić '[myStatusItem popUpStatusItemMenu: [menu myStatusItem]]', chociaż to nie podświetli twojego statusitem (który jest lame). Jedyną rzeczą, którą sugerowałbym może być sfałszowanie kliknięcia nad statusem statusu. –

+0

Dziękuję bardzo – Craig