15

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

たとえば、テキスト エディターに何かを入力し、テキストを選択し、グローバル ショートカットを押すと、アプリが起動し、テキスト エディターから選択したテキストを知りたいと思います。

私がこれまでに持っているものは次のとおりです (アクセシビリティ API を介して現在選択されているテキストのグローバル画面座標を取得する方法からコードを採用しました。 )

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 やメールなどのアプリでは動作しないことです...

ありがとう

4

1 に答える 1

1

ユーザーがメニューバーアプリをトリガーしたときに単に発生するのではなく、サービスメニューからこれをトリガーする必要があるため、これは技術的に正確な質問に対する解決策ではありません。

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

于 2016-12-22T21:50:13.250 に答える