2013-11-14 11 views
12

システムワイドショートカットを使用して開始できるステータスメニューアプリがあります。アプリがアクティブになると、現在実行中のアプリケーションで選択されたテキストを何とか取得できたらすばらしいことになります。ココアのアクティブアプリケーションで現在選択されているテキストを取得

たとえば、テキストエディタに何かを入力してテキストを選択し、グローバルショートカットをクリックすると、自分のアプリケーションが表示され、テキストエディタから選択したテキストを知りたいと思います。私は今のところ、以下の(How to get global screen coordinates of currently selected text via Accessibility APIs.から採用コード)である持っているもの

AXUIElementRef systemWideElement = AXUIElementCreateSystemWide(); 
AXUIElementRef focussedElement = NULL; 
AXError error = AXUIElementCopyAttributeValue(systemWideElement, kAXFocusedUIElementAttribute, (CFTypeRef *)&focussedElement); 
if (error != kAXErrorSuccess) { 
    NSLog(@"Could not get focussed element"); 
} else { 
    AXValueRef selectedTextValue = NULL; 
    AXError getSelectedTextError = AXUIElementCopyAttributeValue(focussedElement, kAXSelectedTextAttribute, (CFTypeRef *)&selectedTextValue); 
    if (getSelectedTextError == kAXErrorSuccess) { 

     selectedText = (__bridge NSString *)(selectedTextValue); 
     NSLog(@"%@", selectedText); 
    } else { 
     NSLog(@"Could not get selected text"); 
    } 
} 
if (focussedElement != NULL) CFRelease(focussedElement); 
CFRelease(systemWideElement); 

ここでの問題は、それがSafariやメールなどのアプリで動作しないということです...

おかげ

+0

この問題はまだ解決しましたか? –

+0

いいえ...しかし、私は最後にそれを必要としませんでした...しかし、それはApp Storeで保存され、信頼できる方法で動作する方法を知ることに興味があるでしょう... – Georg

+0

同じように...また見たいと思いますなし - Appstore保存方法... –

答えて

1

これは技術的にはあなたの正確な質問に対する解決策ではありません。ユーザーがメニューバーのアプリケーションを起動するときに起こるのではなく、サービスメニューからこれを引き起こさなければならないからです。

System Serviceを使用できます。現在選択されているテキストをペーストボード経由でメニューバーに送信するサービスを作成します。

関連する問題