2009-11-18 22 views
7

AppleScript çok yavaştı, bu yüzden ScriptingBridge'i System Preferences.app uygulamasını açmak için denedim ve geçerli paneli de çok yavaş olarak ayarlayın. Bunu yapmanın daha hızlı bir yolu var mı? DüzgünProgramlı olarak prefpane açmak için en hızlı yol?

+2

Sistem Preferences.app uygulamasının nasıl çalıştırıldığına bakılmaksızın can sıkıcı şekilde yavaş olduğunu fark ettiniz mi? Çünkü bunu fark ettim. –

+0

Bir önceki sorunuzu ve bunu göz önüne alarak, bir göz atmak isteyebilirsiniz: http://0xced.blogspot.com/2008/02/upgrading-system-preference-pane.html – 0xced

+0

Harika makale 0xced, teşekkürler! –

cevap

5

Prefpane demetini açmak için Launch Services veya NSWorkspace'i kullanın. Bu açık (1) komutunun programatik sürümüdür. urlString mümkün bazı listesinden alınmıştır

NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"; 
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]]; 

: gösterildiği gibi

+1

Gerçekten: '[[NSWorkspace sharedWorkspace] openFile: @"/Path/To/Foo.prefPane "];' – mxcl

+0

Üçüncü Şahıs prefpane'inizin nerede kurulduğunu anlamanız gerektiğinden, genellikle bu konuya ilgi duymuyorum. Ne yazık ki, paket tanımlayıcılarını uygun NSWorkspace çağrısı ile kullanmak işe yaramıyor. – mxcl

+1

Sadece iki yer olabilir ve her ikisine de bakmak için 'NSSearchPathForDirectoriesInDomains' kullanabilirsiniz. –

5

Hayır beyin:

system("open -a System\\ Preferences"); 

Ve açılacak Bölmesi seçmek için:

open /System/Library/PreferencePanes/Internet.prefPane 
open /System/Library/PreferencePanes/DateAndTime.prefPane 
... 

biraz deneme yanılma, /System/Library/PreferencePanes/ ilk sağ dosyasıyla bulundu sağlanmıştır.

Eminim, bu son hile yapmak için bir daha kakao yolu var, bu ... her dil ile çalışır. Ayrıca

: üçüncü taraf uygulamalar, *.prefPane dosyalarını yüklemek orası gibi ... Bu yolları

/Library/PreferencePanes/ 
~/Library/PreferencePanes/ 

kontrol etmek isteyebilirsiniz

0

tam olarak nasıl Scripting'i kullandınız Köprü?

Bu kod ile çalıştı ve bunu oldukça iyi performans düşünüyorum: Burada
SystemPreferencesApplication *SystemPreferences = [SBApplication applicationWithBundleIdentifier:@"com.apple.systempreferences"]; 
@try { 
    [SystemPreferences activate]; 
    SystemPreferences.currentPane = [SystemPreferences.panes objectWithID:@"com.apple.preference.security"]; 
} @catch (NSException *exception) { 
    NSLog(@"%@", [exception description]); 
} 

Kakao sadece eğlence için başka bir seçenek olmakla birlikte, hiç belgelenmiş (ve sadece sistem tercihi bölmeleri ile çalışır) değil. Performansları karşılaştırmak için kullanabilirsiniz, ancak üretim kodunda kullanmayın.

id bezelServicesTask = [NSConnection rootProxyForConnectionWithRegisteredName:@"com.apple.BezelServices" host:nil]; 
[bezelServicesTask performSelector:@selector(launchSystemPreferences:) withObject:@"Security.prefPane"]; 
+0

Sizinle tam olarak aynı Scripting Bridge koduna sahibim (iyi, istisna kodu hariç) - Apple örneğinden aldım. Tuhaf olan şey, PreferencePanes klasörünün içinde önceden prefpane dosyasına çift tıklarsam, Sistem Tercihleri ​​açılır ve bölmeyi anında yükler. –

+0

Scripting Bridge kullanarak test ettim. Ama son derece yavaş olduğu ortaya çıktı. –

8

dosya sistemi yolu ile daha doğrudan bir usul NSWorkspace ile tercih bölmesine uygun bir kaynak URL kullanmaktır URL dizeleri https://macosxautomation.com/system-prefs-links.html

+1

Mükemmel! Mevcut kabul edilen cevaptan çok daha iyi bir yöntem, özellikle bir pref bölmesinde belirli bir bölüme açmanıza izin verdiği için. Güvenlik pref panelinin Erişilebilirlik bölümüne açık olması için özel olarak bakıyordum, cevabınız özellikle benim için önemliydi. – GuyGizmo

+0

İkinci düşüncede, bu yöntem MacOS 10.9'da çalışmadığı için oldukça mükemmel değildir. Ama dünyanın diğer seçeneklerine geri dönmek ve bunu 10.10 ve sonrası için kullanmak değil. – GuyGizmo

+0

10.10+ için, bu kabul edilen cevap olmalıdır. Mükemmel çalışıyor. – Bryan

İlgili konular