es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Detectando si un Mac tiene un teclado retroiluminado

Es bastante fácil detectar si una Mac tiene un teclado iluminado con ioreg en la línea de comandos:

ioreg -c IOResources -d 3 | grep "'KeyboardBacklight'" | sed 's/^.*= //g'

Pero, ¿cómo puedo obtener programáticamente esta propiedad booleana IOKit utilizando la última versión de Swift? Estoy buscando algún código de ejemplo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener programáticamente la propiedad booleana IOKit para un teclado iluminado utilizando Swift, puedes usar la clase IOHIDManager del framework IOKit. Aquí tienes un código de ejemplo:

    import IOKit // importar el framework IOKit
    
    func isKeyboardBacklightOn() -> Bool? {
        let hidManager = IOHIDManagerCreate(kCFAllocatorDefault, IOOptionBits(kIOHIDOptionsTypeNone))
        let matchingDictionary = [kIOHIDDeviceUsagePageKey: kHIDPage_AppleVendorTopCase,
                                  kIOHIDDeviceUsageKey: kHIDUsage_AV_TopCase_Keyboard] as CFDictionary
        IOHIDManagerSetDeviceMatching(hidManager, matchingDictionary)
        IOHIDManagerOpen(hidManager, IOOptionBits(kIOHIDOptionsTypeNone))
    
        let result = IOHIDManagerCopyDevices(hidManager)
        guard let devices = result?.takeRetainedValue() as? [IOHIDDevice] else {
            return nil
        }
    
        for device in devices {
            if let element = IOHIDDeviceGetProperty(device, kIOHIDKeyboardBacklightKey as CFString) {
                let value = Unmanaged<nsnumber>.fromOpaque(element).takeUnretainedValue()
                return value.boolValue
            }
        }
    
        return nil
    }
    

    Esta función crea un objeto IOHIDManager y establece un diccionario de coincidencia con las claves de uso de página y uso apropiadas para el Apple Vendor Top Case y el teclado, respectivamente. Luego abre el administrador y recupera una lista de dispositivos coincidentes. Para cada dispositivo, verifica la propiedad kIOHIDKeyboardBacklightKey, recupera su valor y devuelve un booleano que indica si la retroiluminación del teclado está encendida o no. Si encuentra algún error o no puede encontrar un dispositivo coincidente, devuelve nil.

    Nota: Este código asume que la Mac en cuestión tiene un teclado iluminado con una interfaz IOKit compatible.

Comments are closed.