7

Quiero habilitar el acceso para dispositivos de asistencia en las Preferencias del Sistema mediante programación. Pero el problema es que mi aplicación no se ejecuta como usuario root y no quiero que mi aplicación sea como usuario root y tampoco debería solicitar ninguna autenticación intermedia.Habilite el acceso para el dispositivo de asistencia programáticamente

Quiero tocar todos los eventos de teclado de forma global. Estoy usando CGEventTapCreate() para el same.In la documentación de CGEventTapCreate() de la API se menciona que, grifos de eventos recibe la llave y llave de eventos abajo si una de las siguientes condiciones es verdadera:

  1. El proceso actual se ejecuta como el usuario raíz.
  2. El acceso para dispositivos de asistencia está habilitado. En Mac OS X v10.4 & más adelante, puede habilitar esta función usando Preferencias del sistema, Panel de acceso universal, Vista del teclado.

Intenté manualmente marcando Habilitar acceso para dispositivos de asistencia desde la preferencia del sistema y me da el resultado esperado.

¿Hay alguna forma de hacer lo mismo a través del programa sin pedir autenticación y la aplicación no se ejecuta como usuario root?

Gracias,

Dheeraj.

Respuesta

6

Puede ejecutar un AppleScript (o traducir el Applescript en ScriptingBridge o lo que su capa de Objective-C en AppleEvents es)

Aquí es un AppleScript que yo uso en un proyecto particular que hace algo similar a lo que necesita :

on isUIScriptingOn() 
    tell application "System Events" to set isUIScriptingEnabled to UI elements enabled 
    return isUIScriptingEnabled 
end isUIScriptingOn 

on turnUIScriptingOn(switch) 
    tell application "System Events" 
     activate 
     set UI elements enabled to switch 
    end tell 
end turnUIScriptingOn 

on run 
    if not isUIScriptingOn() then 
     display dialog "Enable Access for assistive devices (found in the Universal Access System Preference) must be on for this software to correctly work. This program will enable this setting for you" 
     turnUIScriptingOn(true) 
     display dialog "Access for assistive devices in now on" 
    end if 
end run 
3

Generalmente se considera grosero cambiar la configuración del sistema de un usuario sin al menos decirles, si no se solicita permiso explícitamente. La mayoría de las aplicaciones que necesitan esta configuración solo verifican si está habilitada y, de no ser así, le dicen al usuario que la active.

+0

Hay una manera de habilitarlo por proceso. Desafortunadamente no sé lo que es, tengo aplicaciones que hacen esto y creo que recuerdo haber visto algo al respecto en la lista de correo de dev de cacao – hooleyhoop

+0

¿Y cómo se comprueba para ver si está habilitado programáticamente? – Chetan

0

Hay una manera de habilitarlo por proceso. Por desgracia, no sé lo que es, tengo aplicaciones que hacen esto Tho y creo que recuerdo haber visto algo al respecto en la lista de correo de cacao dev

¿Estás seguro de que es posible activarlo en un proceso per base, sin necesidad de tener derechos de administrador? Y si es así, ¿todos los eventos serán capturas, o solo los que pertenecen al proceso?

4

Ok ustedes la solución/alguna información de fondo can be found at this address ..

Así, Apple se le ocurrió otra solución en Tigre que soluciona estos problemas: la función mágica AXMakeProcessTrusted. Eso habilitará la API solo para su aplicación y necesita ser llamado desde un proceso que se ejecuta como root, por lo que es seguro. También es automático, por lo que además de pedirle al usuario su contraseña, el usuario no necesita hacer nada. El problema es que parece que nadie lo usa. Todas las aplicaciones de terceros que he visto e incluso Automator solo le piden al usuario que marque manualmente el cuadro en Preferencias del Sistema.Es más trabajo implementarlo y tiene un gran error no documentado (la aplicación debe ser relanzada antes de que realmente sea confiable Actualización: informada como # 5711990), pero realmente creo que la gente debería usarla. Entonces, pensé que lanzaría el código para que sea fácil de implementar en tu aplicación. Incluye un agente auxiliar que debería poder incluir en su proyecto.

+0

Éste debe establecerse como la respuesta correcta. –

+0

Desafortunadamente, la publicación de blog archivada no incluye el código de muestra. – JWWalker

+0

Esto no funciona en Mavericks –

Cuestiones relacionadas