Como posso saber se Voice Over é ligado em Preferências do Sistema?
-
20-08-2019 - |
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?
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])