Je vais bientôt travailler sur une application qui doit obtenir le texte actuellement sélectionné dans la fenêtre de l'application la plus en avant, que ce soit Safari, Pages, TextEdit, Word, etc., et faire quelque chose avec ce texte.Comment obtenir le texte sélectionné à partir d'une autre application?
Mon but est de trouver une solution qui fonctionne avec autant d'applications que possible. Jusqu'à présent, j'ai pensé à utiliser AppleScript, mais cela limiterait la quantité d'applications qui pourraient être utilisées avec mon service. Au moins ces applications courantes doivent être supportées: Safari, Firefox (pas AppleScript?), Word, Pages, Excel, TextEdit, ...
J'ai aussi pensé à garder le contenu du presse-papiers dans une variable temporaire puis simuler une opération de copie de texte (Cmd-C), récupérer le texte, puis remettre le contenu original. Cela mettrait probablement en surbrillance l'élément de menu Édition lorsque l'opération de copie est simulée et me semble un peu hachée. IMO cette solution ne semble pas assez bonne pour un produit commercial.
Je cherche également à obtenir plus que la sélection (à savoir: le contenu complet de la page dans Safari ou Word, etc.) pour ajouter quelques fonctionnalités supplémentaires dans le futur.
Des idées/détails sur la façon d'implémenter ce comportement?
Merci d'avance pour tous les conseils! N.B: Je dois prendre en charge au moins 10,4 et plus, mais idéalement plus vieux que 10,4 aussi.
MISE À JOUR:
La solution que j'ai opté pour: Utilisation de la « chaîne de responsabilité » modèle de conception (GOF) pour combiner 3 méthodes différentes (Pasteboard, AppleScript et accessibilité), en utilisant la meilleure source d'entrée disponible automatiquement. Notez que lorsque vous utilisez la méthode executeAndReturnError de NSAppleScript qui retourne un NSAppleEventDescriptor (disons une instance de descripteur), pour que la méthode [descriptor stringValue] renvoie quelque chose, dans votre AppleScript vous devez utiliser "return someString" EXTÉRIEUR d'un "tell" block sinon rien ne sera renvoyé.
Est-il possible que vous pouvez poster un code sur la façon d'obtenir le texte sélectionné dans l'application au premier plan? – Enchilada