首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测Mac是否有背光键盘

检测Mac是否有背光键盘
EN

Stack Overflow用户
提问于 2021-12-15 08:00:14
回答 2查看 473关注 0票数 12

在命令行中,很容易检测到Mac是否有带有ioreg的照明键盘:

代码语言:javascript
复制
ioreg -c IOResources -d 3 | grep '"KeyboardBacklight" =' | sed 's/^.*= //g'

但是,如何使用最新的Swift以编程方式获得这个IOKit布尔属性?我在找一些样本代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-15 10:51:26

我通过一些尝试和错误找出了以下几点:

  • 从IO注册中心获取"IOResources“节点。
  • 从该节点获取"KeyboardBacklight“属性。
  • (有条件)将属性值转换为布尔值。

我已经在MacBook Air (带有键盘背光)和iMac (没有键盘背光)上测试了这一点,并且在这两种情况下都得到了正确的结果。

代码语言:javascript
复制
import Foundation
import IOKit

func keyboardHasBacklight() -> Bool {
    let port: mach_port_t
    if #available(macOS 12.0, *) {
        port = kIOMainPortDefault // New name as of macOS 12
    } else {
        port = kIOMasterPortDefault // Old name up to macOS 11
    }
    let service = IOServiceGetMatchingService(port, IOServiceMatching(kIOResourcesClass))
    guard service != IO_OBJECT_NULL else {
        // Could not read IO registry node. You have to decide whether
        // to treat this as a fatal error or not.
        return false
    }
    guard let cfProp = IORegistryEntryCreateCFProperty(service, "KeyboardBacklight" as CFString,
                                                       kCFAllocatorDefault, 0)?.takeRetainedValue(),
          let hasBacklight = cfProp as? Bool
    else {
        // "KeyboardBacklight" property not present, or not a boolean.
        // This happens on Macs without keyboard backlight.
        return false
    }
    // Successfully read boolean "KeyboardBacklight" property:
    return hasBacklight
}
票数 9
EN

Stack Overflow用户

发布于 2021-12-16 07:15:07

作为马丁的绝妙回答的增编,以下是我从苹果开发人员技术支持处得到的说明:

从Swift调用I/O Kit有点困难。这里有两种策略:

  • 您可以将I/O包装在一个Swift友好的包装器中,然后使用它来完成您的任务。
  • 你可以直接去做你的任务,导致很多丑陋的低级别的斯威夫特。

从I/O注册表中提取随机属性并不是实现长期二进制兼容性的最佳途径。我们的一般策略是,我们只支持在标头中定义符号常量的属性(最显著的是IOKitKeys.h,但还有很多其他属性)。KeyboardBacklight没有符号常量,因此不受支持。

确保你是防御性的代码。该属性可能会消失,更改含义,更改其类型,等等。在所有这种情况下,您的代码必须表现得合理。

请确保您提交了一个适当的API获得这一信息的增强请求,确保包括一个高层次的描述,你的总体目标。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70360160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档