2014-01-22 8 views
0

Возможно ли получить доступ к элементу представления из другого приложения в OS X? Например, есть два приложения, а у одного есть NSTextView. Технически возможно, что второе приложение может прочитать текст из текстового представления первого приложения?Доступ к представлению от другого приложения Cocoa

Аналогичный случай в Windows, когда вы вызываете GetWindowTextA() для окна, которого нет в вашем приложении.

+0

Два приложения работают в отдельных процессах, а не в двух окнах в одном приложении, не так ли? – Jay

+0

Да, 2 разных приложения, неявно разные процессы – Bogdan

+0

Добавлен пример моего ответа – markhunte

ответ

0

Вы могли бы попытаться связать ценность TextView в к NSUserDefaults стандартным по умолчанию в приложении 1.

А в приложении 2, прочитать запись. Посмотрите на Preferences Utilities Reference на то, как читать другие приложения.

Вот краткий пример, который получает путь загрузки из Safari.

#import "AppDelegate.h" 
    CFStringRef theValue; 
    @implementation AppDelegate 

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 

    //-- THE PREFERENCE FOR ANOTHER APP 
    CFStringRef appID =CFSTR("com.apple.Safari"); 

     //-- THE PREFERENCE KEY FOR ANOTHER APP:| GETS THE DOWNLOAD FOLDER PATH 
    CFStringRef theKey = CFSTR("DownloadsPath"); 


    Boolean didSynch; 


    //-- TRY AND MAKE SURE THE OTHER APP SYNCHRONISES ITS PREFENCES; 
    //--Writes to permanent storage all pending changes to the preference data for the application, and reads the latest preference data from permanent storage 
    didSynch = CFPreferencesAppSynchronize (
             appID 
             ); 
    if (didSynch) { 
     //-- CALL METHOD TO READ THE PREFERENCE KEY VALUE 
     [self readPrefValue :theKey : appID]; 

     NSLog(@"theValue %@",theValue); 
    } 



    CFRelease(theValue); 
    CFRelease(appID); 
    CFRelease(theKey); 
} 

    - (void)readPrefValue :(CFStringRef) Key : (CFStringRef) appID 
    { 
     theValue = CFPreferencesCopyValue (
              Key, 
              appID, 
              kCFPreferencesCurrentUser, 
              kCFPreferencesAnyHost 
              ); 
    } 



    @end 
+0

Большое спасибо, я посмотрю! – Bogdan

1

Это невозможно (с общедоступными API).

Возможно, у вас есть дистанционное управление другим приложением с использованием accessibility, но нет такой вещи, как прямой доступ к NSTextField другого приложения в другом процессе.

+0

Спасибо, я также рассмотрю, как это работает. – Bogdan

Смежные вопросы