Qualcuno potrebbe dirmi come incollare il testo dall'applicazione am (che si trova nella barra di stato) in un campo NSText che si trova all'interno di un'applicazione diversa.
Incollare è ciò che accade nell'applicazione di ricezione. La scrittura su un cartone è una copia.
Inoltre, non si può presumere che l'utente vorrà incollare in un NSTextField. Può essere un NSTextView o un'area di testo in una WebView o un controllo Carbon EditText o MLTE o qualche altro editor di testo come un editor di testo Qt o wxWidgets. Potrebbero persino utilizzare un'app con una visualizzazione elenco che consente di incollare il testo direttamente in essa.
Quindi, non esiste un modo programmatico per dire direttamente a un'applicazione "ecco un po 'di testo - incollarlo, per favore". Devi copiarlo nella tavolozza generale e quindi creare un evento che generalmente dovrebbe incollare l'applicazione in primo piano. Il suggerimento di Charlie di ⌘V è un modo, anche se difficile; il layout di Dvorak mette V su un'altra chiave, mentre il layout "Dvorak QWERTY puts" mette V-con-⌘ (a differenza di V-without-⌘) sullo stesso tasto di QWERTY V.
Per forgiare quel ⌘V evento, guarda su CGEventTap. Dovrai utilizzare lo the CGEventCreateKeyboardEvent
function per creare l'evento stesso, e poiché tale funzione richiede un codice chiave, dovrai cercare il codice tasto corretto per la parte V della combinazione ⌘V, che richiederà il passaggio da Text Input Source Services o Keyboard Layout Services, a seconda del layout.
Si potrebbe a questo punto pensare di utilizzare Accessibilità per trovare la voce di menu Incolla nel menu Modifica e inviarlo un messaggio AXPress, ma "Incolla" e "Modifica" sono solo le parole inglesi per questi concetti; se l'hai fatto, la tua app non funzionerebbe in nessun'altra lingua. Potresti andare su ordine (terzo menu, sesta voce di menu), ma la tua app non funzionerebbe in applicazioni senza un menu File, o senza una voce di menu Ripeti, o con due voci di menu Annulla (Photoshop). Creare un evento ⌘V è davvero la strada da percorrere.
fonte
2010-04-22 16:07:27
CGEventSourceRef non funziona, mentre io ho la mia domanda sandbox. C'è un modo per risolvere il problema? – iPhoneDv
@iPhoneDv: dovresti fare una domanda separata con ulteriori informazioni su cosa stai facendo e quale problema hai incontrato. –
Ecco un collegamento non interrotto alla documentazione di KeyboardLayoutServices: https://developer.apple.com/legacy/library/documentation/Carbon/Reference/KeyboardLayoutServices/ (Naturalmente, non funzionerà ancora se l'utente ha disabilitato o modificato la scorciatoia da tastiera per incollare?) – jtbandes