2009-11-18 20 views
7

AppleScript era demasiado lento, así que probé ScriptingBridge para abrir System Preferences.app y configurar el panel actual, que también es demasiado lento. ¿Hay una forma más rápida de hacerlo? adecuadamente¿La forma más rápida de abrir programáticamente el prefpane?

+2

¿Ha notado las Preferencias del sistema. La aplicación es molestamente lenta de abrir sin importar cómo se invoca? Porque me he dado cuenta de eso. –

+0

Teniendo en cuenta su pregunta anterior y esta, es posible que desee echar un vistazo a esto: http://0xced.blogspot.com/2008/02/upgrading-system-preference-pane.html – 0xced

+0

Gran artículo 0xced, gracias! –

Respuesta

5

Use Launch Services o NSWorkspace para abrir el paquete prefpane. Esa es la versión programática del comando open (1).

+1

De hecho: '[[NSWorkspace sharedWorkspace] openFile: @"/Path/To/Foo.prefPane "];' – mxcl

+0

Aunque no siempre estoy interesado en esto, ya que tiene que averiguar dónde se ha instalado su Third-Party prefpane. Por desgracia, el uso de identificadores de paquetes con la llamada NSWorkspace adecuada no parece funcionar. – mxcl

+1

Solo hay dos lugares donde podría estar, y puede usar 'NSSearchPathForDirectoriesInDomains' para buscarlos en ambos. –

5

obviedad:

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

Y para elegir el panel para abrir:

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

Siempre que se encontró, con un poco de ensayo y error, el archivo correcto en /System/Library/PreferencePanes/ primero.

Estoy seguro de que hay una forma más de cacao para hacer este último truco, aún así ... esto funciona con todos los idiomas.

también: es posible que desee comprobar estos caminos

/Library/PreferencePanes/ 
~/Library/PreferencePanes/ 

... ya que es donde aplicaciones de terceros instalan sus archivos *.prefPane

0

¿Cómo fue exactamente lo que se utiliza la secuencia de comandos ¿Puente?

he intentado con este código y creo que funciona razonablemente bien:

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]); 
} 

Aquí es otra opción sólo por diversión, que es cacao, pero no documentado en absoluto (y sólo funciona con paneles de preferencias del sistema). Puede usarlo para comparar actuaciones, pero no lo use en el código de producción.

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

Tengo exactamente el mismo código de Scripting Bridge que usted (bueno, menos el código de excepción) - Tomé el mío de la muestra de Apple. Lo extraño es que si hago doble clic en el archivo prefpane que ya está dentro de la carpeta PreferencePanes, se abren las Preferencias del Sistema y se carga el panel al instante. –

+0

Probé usando Scripting Bridge. Pero resultó que es EXTREMADAMENTE lento. –

8

un método más directo que el uso de la ruta del sistema de archivos es usar el URL de recursos adecuado para el panel de preferencias con NSWorkspace como se muestra:

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

donde el urlString fue tomada de una lista de algunas de las posibles Cadenas de URL https://macosxautomation.com/system-prefs-links.html

+1

¡Perfecto! Un método mucho mejor que la respuesta aceptada actual, especialmente porque le permite abrir una sección específica en un panel de pref. Estaba buscando específicamente abrirla en la sección Accesibilidad del panel de Pref. De Seguridad, por lo que tu respuesta fue especialmente relevante para mí. – GuyGizmo

+0

Pensándolo bien, este método no es del todo perfecto, ya que no funciona en macOS 10.9. Pero no es el fin del mundo recurrir a otras opciones y usar esto para 10.10 y posteriores. – GuyGizmo

+0

Para 10.10+, esta debería ser la respuesta aceptada. Funciona perfectamente. – Bryan

Cuestiones relacionadas