Как узнать, включен ли Voice Over в Системных настройках? - PullRequest
1 голос
/ 27 января 2009

Есть ли способ, идеально обратно совместимый с Mac OS X 10.3, определить, активирован ли «Голос за кадром» в Системных настройках?

Ответы [ 4 ]

4 голосов
/ 28 января 2009

Похоже, что он хранится в файле настроек для универсального доступа. Идентификатор приложения - «com.apple.universalaccess», а ключ, содержащий флаг для включения или выключения VoiceOver - «voiceOverOnOffKey». Вы должны быть в состоянии получить это, используя API CFPreferences, что-то вроде:

CFBooleanRef flag = CFPreferencesCopyAppValue(CFSTR("voiceOverOnOffKey"), CFSTR("com.apple.universalaccess"));
1 голос
/ 11 марта 2019

Если у кого-то есть тот же вопрос, было бы полезно знать, что статус Voice Over доступен сейчас через удобный интерфейс:

NSWorkspace.shared.isVoiceOverEnabled
1 голос
/ 22 сентября 2018

Основываясь на превосходном ответе Пита, я создал это решение Swift 4.2 , которое, на мой взгляд, гораздо легче читать. Я также думаю, что в этом случае удобнее использовать вычисляемое свойство вместо функции.

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 и Accessibility в целом являются очень важными темами, и грустно, что отсутствие документации Apple, особенно для macOS, затрудняет для разработчиков правильную реализацию.

0 голосов
/ 31 августа 2018

Решение в Swift 4 выглядит следующим образом:

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
}

Кроме того, чтобы сделать текстовое объявление с VoiceOver в macOS, выполните следующие действия:

let message = "Hello, World!"
NSAccessibilityPostNotificationWithUserInfo(NSApp.mainWindow!,
  NSAccessibilityNotificationName.announcementRequested,
  [NSAccessibilityNotificationUserInfoKey.announcement: message,
  NSAccessibilityNotificationUserInfoKey.priority:
  NSAccessibilityPriorityLevel.high.rawValue])
...