4

CMD V イベントをシミュレートして、アプリからアクティブなアプリにデータを貼り付けていました。ただし、新しいサンドボックスの制限により、これは許可されなくなったようです。

ペーストを呼び出す別の方法を知っている人はいますか?

4

1 に答える 1

0

AppleScript を使用してそれを行うことができます。

set the clipboard to "MyString"
tell application "System Events"
    keystroke "v" using {command down}
end tell

cocoa アプリケーションから、NSAppleScript. アプリの Resources フォルダーに Script.txt というファイルがあり、次のようになっているとします。

tell application "System Events"
    keystroke "v" using {command down}
end tell

その後、次のコードを使用できます。

- (void)pasteInActiveApp:(NSData *)data type:(NSString *)type
{
    NSPasteboardItem *item = [[NSPasteboardItem alloc] init];
    [item setData:data forType:type];

    NSPasteboard *pboard = [NSPasteboard generalPasteboard];
    [pboard clearContents];
    [pboard writeObjects:@[item]];

    NSDictionary *errorDict = nil;
    NSAppleScript *script = [[NSAppleScript alloc] initWithSource:[self pasteScript]];
    NSAppleEventDescriptor *result = [script executeAndReturnError:&errorDict];
    // Handle result
}

- (NSString *)pasteScript
{
    static NSString *script;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSError *error;
        script = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"Script" withExtension:@"txt"] encoding:NSUTF8StringEncoding error:&error];
        if (error) {
            // Handle error
        }
    });

    return script;
}

pasteInActiveApp:type:あとは、貼り付けたいデータとペーストボード タイプを指定してメソッドを呼び出すだけです。

余談ですが、バックグラウンドで実行されているアプリケーションからフォアグラウンドのアプリに貼り付けることはあまり良い考えではないと思います。まず、どのアプリに貼り付けているのかわからず、たとえ貼り付けたとしても、どこに貼り付けているのかわかりません。ユーザーは、複数の入力フィールド (または同様のもの) を持つフォームを備えたブラウザーを使用している場合があります。また、ユーザーがそうしたくない場合もあります。

編集: Apple スクリプトではなく、Objective-C コードでデータが設定されるようにコードを変更しました。

于 2013-06-20T11:16:12.780 に答える