He encontrado una solución que utiliza el administrador de HID, esta parece ser la manera de hacerlo en Cocoa. (Hay otra solución para carbono, pero no funciona para el sistema operativo de 64 bits X.)
Citando Daniel Reese en el Dan and Cheryl's Place blog:
#include <IOKit/IOKitLib.h>
/*
Returns the number of seconds the machine has been idle or -1 on error.
The code is compatible with Tiger/10.4 and later (but not iOS).
*/
int64_t SystemIdleTime(void) {
int64_t idlesecs = -1;
io_iterator_t iter = 0;
if (IOServiceGetMatchingServices(kIOMasterPortDefault,
IOServiceMatching("IOHIDSystem"),
&iter) == KERN_SUCCESS)
{
io_registry_entry_t entry = IOIteratorNext(iter);
if (entry) {
CFMutableDictionaryRef dict = NULL;
kern_return_t status;
status = IORegistryEntryCreateCFProperties(entry,
&dict,
kCFAllocatorDefault, 0);
if (status == KERN_SUCCESS)
{
CFNumberRef obj = CFDictionaryGetValue(dict,
CFSTR("HIDIdleTime"));
if (obj) {
int64_t nanoseconds = 0;
if (CFNumberGetValue(obj,
kCFNumberSInt64Type,
&nanoseconds))
{
// Convert from nanoseconds to seconds.
idlesecs = (nanoseconds >> 30);
}
}
CFRelease(dict);
}
IOObjectRelease(entry);
}
IOObjectRelease(iter);
}
return idlesecs;
}
El código ha sido ligeramente modificada, para que se ajuste en el límite de 80 caracteres de stackoverflow.
que sería grande si hay en cualquier buenos protectores de pantalla con la funcionalidad que estoy buscando, tengo que poner algo de información personalizada en el video de mi aplicación, etc :( – tobros91
Vas a tener que construir esa funcionalidad de todos modos, también podría hacer que sea un protector de pantalla. ahorrador no es realmente tan difícil; en l al este no en la medida en que puedo ver. –