Domanda

C'è un modo, idealmente retrocompatibile con Mac OS X 10.3, per dire se " Voice Over " è attivato in Preferenze di Sistema?

È stato utile?

Soluzione

Questo sembra essere memorizzato in un file delle preferenze per Universal Access. L'identificatore dell'app è & Quot; com.apple.universalaccess & Quot; e la chiave che contiene il flag per sapere se VoiceOver è attivo o meno è " voiceOverOnOffKey " ;. Dovresti essere in grado di recuperarlo utilizzando l'API CFPreferences, qualcosa del tipo:

CFBooleanRef flag = CFPreferencesCopyAppValue(CFSTR("voiceOverOnOffKey"), CFSTR("com.apple.universalaccess"));

Altri suggerimenti

Basato sulla risposta eccellente di Petes I & # 8217; ho creato questa soluzione Swift 4.2 , che trovo molto più facile da leggere. Penso anche che & # 8217; è più utile usare una proprietà calcolata in questo caso invece di una funzione.

var hasVoiceOverActivated: Bool {

    let key = "voiceOverOnOffKey" as CFString
    let id = "com.apple.universalaccess" as CFString

    if let voiceOverActivated = CFPreferencesCopyAppValue(key, id) as? Bool {
        return voiceOverActivated
    }

    return false

}

VoiceOver e Accessibilità in generale sono argomenti molto importanti ed è triste che la mancanza di documentazione sulle mele, specialmente per macOS, renda così difficile per gli sviluppatori implementarla correttamente.

Se qualcuno ha la stessa domanda, potrebbe essere utile sapere che lo stato di Voice Over è ora accessibile tramite una comoda interfaccia:

NSWorkspace.shared.isVoiceOverEnabled

La soluzione in Swift 4 è la seguente:

func NSIsVoiceOverRunning() -> Bool {

  if let flag = CFPreferencesCopyAppValue("voiceOverOnOffKey" as CFString, "com.apple.universalaccess" as CFString) {
    if let voiceOverOn = flag as? Bool {
      return voiceOverOn
    }
  }

  return false
}

Inoltre, per fare un annuncio di testo con VoiceOver su macOS, procedi come segue:

let message = "Hello, World!"
NSAccessibilityPostNotificationWithUserInfo(NSApp.mainWindow!,
  NSAccessibilityNotificationName.announcementRequested,
  [NSAccessibilityNotificationUserInfoKey.announcement: message,
  NSAccessibilityNotificationUserInfoKey.priority:
  NSAccessibilityPriorityLevel.high.rawValue])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top