7

Chcę włączyć programowo dostęp do urządzeń pomocniczych w Preferencjach systemowych. Ale problem polega na tym, że moja aplikacja nie działa jako użytkownik root i nie chcę, aby moja aplikacja była użytkownikiem root, a także nie powinna żądać uwierzytelnienia pośredniego.Automatyczne programowanie dostępu do urządzenia wspomagającego

Chcę dotknąć wszystkie wydarzenia na klawiaturze na całym świecie. Używam CGEventTapCreate() dla same.In dokumentacji CGEventTapCreate (API) jest wspomnieć, że zawory imprez otrzymać klucz i klucz wydarzenia w dół, jeśli jeden z następujących warunków:

  1. Obecny proces działa jako użytkownik root.
  2. Dostęp dla urządzeń wspomagających jest włączony. W systemie Mac OS X 10.4 & później można włączyć tę funkcję za pomocą Preferencji systemowych, panelu Uniwersalny dostęp, widok klawiatury.

Próbowałem ręcznie, zaznaczając Włącz dostęp dla urządzeń pomocniczych z Preferencji systemowej i daje mi oczekiwany wynik.

Czy istnieje sposób na to samo poprzez program bez pytania o uwierzytelnienie, a także aplikacja nie działa jako użytkownik root?

Dzięki,

Dheeraj.

Odpowiedz

6

można uruchomić AppleScript (lub przetłumaczyć Applescript do ScriptingBridge lub niezależnie warstwa Objective-C na AppleEvents jest)

Oto Applescript, że używam w jednym konkretnym projektem, który robi coś podobnego do tego, co trzeba :

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

Zazwyczaj uważa się za nieuprzejmego zmianę ustawienia systemu użytkownika bez uprzedniego poinformowania go, jeśli nie jest to wyraźne pytanie o pozwolenie. Większość aplikacji, które wymagają tego ustawienia, po prostu sprawdź, czy jest włączona, a jeśli nie, powiedz użytkownikowi, aby ją włączyć.

+0

Istnieje sposób, aby włączyć go na podstawie procesu. Niestety nie wiem co to jest, mam aplikacje, które to robią i chyba pamiętam, że widziałem coś na ten temat na liście mailingowej kakao. – hooleyhoop

+0

A jak sprawdzić, czy jest włączona programowo? – Chetan

0

Istnieje sposób, aby włączyć go na podstawie procesu. Niestety nie wiem co to jest, mam aplikacje, które to robią i chyba pamiętam, że widziałem coś na ten temat na liście mailingowej kakao.

Czy jesteś pewien, że możliwe jest włączenie go na proces podstawa, bez konieczności posiadania uprawnień administratora? A jeśli tak, czy wszystkie zdarzenia zostaną przechwycone lub tylko te, które należą do procesu?

4

Ok wszyscy, rozwiązanie/część informacji tło can be found at this address ..

Tak, Apple wymyślił innego rozwiązania w tygrysa, który rozwiązuje te problemy: magicznej funkcji AXMakeProcessTrusted. To umożliwi API tylko dla twojej aplikacji i musi zostać wywołane z procesu działającego jako root, więc jest bezpieczne. Jest to również całkowicie automatyczne, więc oprócz pytania użytkownika o jego hasło, użytkownik nie musi nic robić. Problem polega na tym, że wydaje się, że nikt go nie używa. Każda aplikacja osoby trzeciej, którą widziałem, a nawet Automator prosi użytkownika o ręczne zaznaczenie pola w Preferencjach systemowych.Jest więcej pracy do wdrożenia i ma jeden wielki nieudokumentowany błąd (aplikacja musi zostać ponownie uruchomiona, zanim faktycznie jest zaufana Aktualizacja: zgłoszona jako # 5711990), ale naprawdę myślę, że ludzie powinni z niej korzystać. Pomyślałem, że wypuszczę kod, aby ułatwić wdrożenie go w twojej aplikacji. Zawiera agenta pomocniczego, który powinieneś po prostu wrzucić do swojego projektu.

+0

Ten powinien być ustawiony jako poprawna odpowiedź. –

+0

Niestety, zarchiwizowany wpis na blogu nie zawiera przykładowego kodu. – JWWalker

+0

To nie działa w indywidualista –

Powiązane problemy