Mac OS X tiene una función de ahorro de energía que permite que el sistema operativo apague el monitor. ¿Hay una API para detectar en el código si el monitor está actualmente encendido o apagado?Compruebe de forma programática si el monitor está apagado
Respuesta
Consulte la sección de administración de energía de IOKit. http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/IOKitFundamentals/PowerMgmt/PowerMgmt.html#//apple_ref/doc/uid/TP0000020-TPXREF104
Es posible que pueda utilizar IORegistryExplorer y buscar un nodo con información de estado sobre la configuración que está buscando. Puede haber múltiples monitores en una Mac en diferentes estados, por lo que debe enumerar el árbol buscando todos los nodos con el tipo de clase que necesita.
El estado de suspensión se maneja en IOPMrootDomain.cpp en el Kernel de Darwin. Puedes probarlo con IOKit, creo. http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/iokit/Kernel/IOPMrootDomain.cpp
Algo así como:
mach_port_t masterPort;
io_registry_entry_t root;
kern_return_t kr;
boolean_t flag = false;
kr = IOMasterPort(bootstrap_port,&masterPort);
if (kIOReturnSuccess == kr) {
root = IORegistryEntryFromPath(masterPort,kIOPowerPlane ":/IOPowerConnection/IOPMrootDomain");
if (root) {
CFTypeRef data;
data = IORegistryEntryCreateCFProperty(root,CFSTR("IOSleepSupported"),kCFAllocatorDefault,kNilOptions);
if (data) {
flag = true;
CFRelease(data);
}
IOObjectRelease(root);
}
}
return flag;
Hay una función en IOKit llama getPowerState(). No estoy seguro si es accesible.
Espero que ayude.
Genial, echaré un vistazo a esto. Gracias. –
Utilicé el IORegistryExplorer y compruebo el valor IOPMrootDomain IOSleepSupported y se registró como verdadero mientras el monitor no estaba dormido (lo que tendría sentido, pero supongo que el código anterior no devolvería el estado de reposo actual del monitor)
Después de un poco de búsqueda me encontré con este pedazo de código que parece volver adecuadamente el estado de sueño del monitor principal
CGDisplayIsAsleep(CGMainDisplayID())
'#include
- 1. Detectando si el monitor está apagado
- 2. Detectar si el monitor está en C#
- 3. Compruebe si se inicia o no un apagado
- 4. ¿Cómo detectar si UISwitch está encendido/apagado?
- 5. Cómo reiniciar la aplicación si el apagado de forma inesperada
- 6. Compruebe si el archivo ya está abierto
- 7. compruebe si NSNumber está vacío
- 8. Compruebe si "exec" está deshabilitado
- 9. Compruebe si un archivo está abierto
- 10. OSX: compruebe si la pantalla está bloqueada
- 11. Compruebe si el objeto está en una lista de objetos
- 12. Cómo determinar si el monitor LCD está encendido desde la línea de comandos de Linux
- 13. Compruebe si el espacio está en una cadena
- 14. ¿Es posible ver si una URL/ruta está protegida detrás del firewall de forma programática?
- 15. Compruebe si $ _POST-value está vacío
- 16. WP7 compruebe si Internet está disponible
- 17. compruebe si la 1ª opción está seleccionada
- 18. AS3: compruebe si un diccionario está vacío
- 19. Compruebe si el tiempo frontal está habilitado en el dispositivo
- 20. Compruebe si la cadena está vacía
- 21. Compruebe si una matriz está vacía
- 22. Compruebe si el servidor SQL (cualquier versión) está instalado?
- 23. Compruebe si un puerto está abierto
- 24. Compruebe si el sistema de archivos Android está encriptado
- 25. compruebe si el indicador de acarreo está establecido
- 26. Compruebe si el cliente de SQL Server está instalado
- 27. Compruebe si el parámetro de función está configurado
- 28. compruebe si el archivo de entrada archivado está vacío jquery
- 29. Compruebe si OpenCV está compilado con TBB
- 30. Compruebe si la consola está presente
posible duplicado de [Comprobar si la pantalla está en el sueño o recibir notificaciones de sueño] (http : //stackoverflow.com/questions/4929731/check-if-display-is-at-sleep-or-receive-sleep-notifications) –
No es exactamente un duplicado exacto; esa pregunta es buscar notificaciones, solo quiero verificar el estado actual. –