2009-11-01 16 views
13

Ho creato un'applicazione di cacao NSStatusBar che si trova nella barra di stato del sistema.Cocoa NSStatusBar Global HotKey

Desidero assegnare un tasto di scelta rapida in modo che quando premuto, attiva le mie applicazioni e mostra il menu.

È possibile ?, Nella mia ricerca e sperimentazione ho trovato alcuni modi diversi di assegnare tasti di scelta rapida globali che possono essere premuti quando l'applicazione è in background ma non riesco a trovare alcun modo per rendere problematico il menu mostrare.

È possibile ?, Se qualcuno pensa che un modo per assegnare un tasto di scelta rapida globale sia il migliore, si prega di postarlo.

Grazie.


uno dei tutorial tasti di scelta rapida che ho trovato era in http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/ per chiunque sia interessato.

+0

Non c'è motivo di visualizzare un menu a meno che non sia stato cliccato o "strappato". –

risposta

11

C'è an actual hotkey API, che esiste ancora in Snow Leopard ed è disponibile in 64-bit. È progettato specificamente per questo scopo, a differenza dei metodi NSEvent, che sono essenzialmente solo un wrapper basato su blocchi attorno a CGEventTaps.

La differenza è che i metodi NSEvent (o CGEventTaps direttamente) fanno si guarda ogni caso in cui entra, mentre l'API hotkey chiama solo la funzione quando l'utente preme tuo hotkey.

+0

Grazie, funziona benissimo, Sai se è possibile far apparire il menu delle app tramite codice? – Craig

+0

Craig: Sì. Vedi il commento di Dave DeLong sulla sua risposta. –

+0

JFYI: In questo momento Apple contrassegna questi metodi come obsoleti, quindi non dovrebbero più essere usati –

17

Se il targeting è il 10.6+, c'è qualche nuova API per NSEvent che può eseguire hotkey globali. Per ulteriori informazioni, controllare questo post impressionante blog: http://cocoakids.net/global-hotkeys-in-cocoa-on-snow-leopard

EDIT (molto tempo dopo)

Tooting il mio proprio corno un po ': non potrei mai fare le cose come PTHotKey e altre librerie per lavorare nel modo Mi aspettavo, quindi alla fine ho rinunciato e ho scritto il mio wrapper HotKey. Ha un'API molto semplice (gli dai un codice chiave, modificatori, un bersaglio e un'azione), che supporta anche cose divertenti come i blocchi di 10.6. È possibile scaricare la fonte qui: http://github.com/davedelong/DDHotKey

+0

Grazie per il post del blog, funziona benissimo ma penso che l'altro esempio venga utilizzato in modo che funzioni anche in 10.5, Sai se è possibile visualizzare il menu delle app tramite codice? – Craig

+0

@Craig puoi fare '[MyStatusItem popUpStatusItemMenu: [menu MyStatusItem]]', sebbene ciò non evidenzi il tuo statusitem (che è zoppo). L'unica altra cosa che suggerirei potrebbe essere quella di fingere un clic sullo statusitem. –

+0

Grazie mille – Craig