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?
Respuesta
Use Launch Services o NSWorkspace para abrir el paquete prefpane. Esa es la versión programática del comando open (1).
De hecho: '[[NSWorkspace sharedWorkspace] openFile: @"/Path/To/Foo.prefPane "];' – mxcl
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
Solo hay dos lugares donde podría estar, y puede usar 'NSSearchPathForDirectoriesInDomains' para buscarlos en ambos. –
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
¿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"];
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. –
Probé usando Scripting Bridge. Pero resultó que es EXTREMADAMENTE lento. –
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
¡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
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
Para 10.10+, esta debería ser la respuesta aceptada. Funciona perfectamente. – Bryan
- 1. Forma más rápida de leer el archivo
- 2. La forma más rápida de completar ArrayList
- 3. La forma más rápida de aprender Maven
- 4. Forma más rápida para enumerar el alfabeto
- 5. La forma más rápida de obtener el icono de shell
- 6. ¿Forma más rápida de comunicarse usando TcpClient?
- 7. ¿Forma más rápida de obtener múltiples FileInfo?
- 8. La forma más rápida de eliminar caracteres de la cadena
- 9. Programmáticamente abierto PrefPane con la sección
- 10. forma más rápida de generar bits aleatorios
- 11. ¿Forma más rápida de revisar rectángulos intersecados?
- 12. Inverse String.Replace - ¿Forma más rápida de hacerlo?
- 13. reforma de datos (una forma más rápida)
- 14. ¿La forma más rápida de ver la pantalla? Cualquier idioma
- 15. La forma más rápida de probar la conexión a Internet
- 16. La forma más rápida de realizar la actualización masiva
- 17. La forma más rápida de reposicionar la sublista en python
- 18. Implementación de Grails: ¿la forma más rápida de implementarse?
- 19. La forma más rápida de actualizar 120 millones de registros
- 20. Emacs: forma más rápida de abrir un archivo cuya ubicación no se conoce
- 21. La forma más rápida de hacer una resta de colección
- 22. Abrir programáticamente el menú de Ayuda Mac
- 23. Forma más rápida de obtener el tipo de contenido
- 24. Detener e iniciar IIS programáticamente. Forma rápida y segura
- 25. Forma más rápida de detectar el país del usuario
- 26. ¿La forma más rápida de aprender Zend Framework?
- 27. ¿Cuál es la forma más rápida de grabar varios archivos?
- 28. La forma más rápida y eficiente de crear XML
- 29. ¿La forma más rápida de escribir archivos hdf5 con Python?
- 30. La forma más rápida de verificar si existe un objeto
¿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. –
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
Gran artículo 0xced, gracias! –