代わりに、ユーザーのアイドル時間を確認できます。ユーザーがコンピューターを離れて立ち去ると仮定すると、IOKit は HID (ヒューマン インターフェイス デバイス) のアイドル時間を報告します。コードは次のようになります。
int64_t getIdleTime(void) {
io_iterator_t iter;
int64_t idle = 0;
// Step 1: Prepare a matching dictionary for "IOHIDSystem", which is the I/O Kit
// class which we will query
if (IOServiceGetMatchingServices
(kIOMasterPortDefault, IOServiceMatching("IOHIDSystem"), &iter) == KERN_SUCCESS)
{
io_registry_entry_t entry = IOIteratorNext(iter);
// Step 2: If we get the classes, get the property:
if (entry) {
CFMutableDictionaryRef dict;
// Query the HIDIdleTime property, if present.
if (IORegistryEntryCreateCFProperties(entry, &dict, kCFAllocatorDefault, 0) == KERN_SUCCESS)
{
CFNumberRef prop = (CFNumberRef) CFDictionaryGetValue(dict, CFSTR("HIDIdleTime"));
if (prop) {
int64_t nsIdle;
// Value is in Nanoseconds, you might want to convert
if (CFNumberGetValue(prop, kCFNumberSInt64Type, &nsIdle)) {
idle = (nsIdle / 1000000000);
}
}
CFRelease(dict); // Be nice. Clean up
}
IOObjectRelease(entry); // as well as here..
}
IOObjectRelease(iter); // and here..
}
return idle;
}