Pergunta

Existe uma maneira, de preferência para trás compatível com Mac OS X 10.3, para dizer se "Voice Over" é ativado em Preferências do Sistema?

Foi útil?

Solução

Esta parece ser armazenado em um arquivo de preferências para o Acesso Universal. O identificador de aplicativo é "com.apple.universalaccess" ea tecla que contém a bandeira para se VoiceOver está ligado ou desligado é "voiceOverOnOffKey". Você deve ser capaz de recuperar isso usando a API CFPreferences, algo parecendo:

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

Outras dicas

Com base em Petes excelente resposta que eu criei este Swift 4.2 solução, que eu acho muito mais fácil de ler. Eu também acho que é mais útil para usar uma propriedade calculada, neste caso, em vez de uma função.

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 Acessibilidade, em geral, são temas muito importantes e é triste que a falta de documentação Maçãs especialmente para MacOS torna tão difícil para os desenvolvedores a implementá-lo corretamente.

Se alguém tiver a mesma pergunta, poderia ser bom saber, que o status de Voice Over é acessível através de uma interface conveniente agora:

NSWorkspace.shared.isVoiceOverEnabled

Solução em Swift 4 é a seguinte:

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
}

Além disso, para fazer um anúncio de texto com o VoiceOver no MacOS, faça o seguinte:

let message = "Hello, World!"
NSAccessibilityPostNotificationWithUserInfo(NSApp.mainWindow!,
  NSAccessibilityNotificationName.announcementRequested,
  [NSAccessibilityNotificationUserInfoKey.announcement: message,
  NSAccessibilityNotificationUserInfoKey.priority:
  NSAccessibilityPriorityLevel.high.rawValue])
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top