मुझे एक समाधान मिला है जो छुपा प्रबंधक का उपयोग करता है, ऐसा लगता है कि यह कोको में ऐसा करने का तरीका है। (वहाँ कार्बन के लिए एक और समाधान है, लेकिन यह 64 बिट ओएस एक्स के लिए काम नहीं करता है)
Dan and Cheryl's Place ब्लॉग पर डैनियल रीज़ हवाला देते हुए:
#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;
}
कोड थोड़ा संशोधित किया गया है, यह फिट बनाने के लिए स्टैक ओवरफ्लो की 80-वर्ण सीमा में।
स्रोत
2011-02-18 10:27:45
कि बहुत अच्छा होगा अगर वहाँ जहां किसी भी जिस कार्यक्षमता के लिए मैं देख रहा हूं, उसके साथ अच्छे स्क्रीनसेवर, मेरे ऐप आदि से वीडियो पर कुछ कस्टम जानकारी डालना है :( – tobros91
आपको उस कार्यक्षमता को वैसे भी बनाना होगा; साथ ही यह स्क्रीन सेवर भी बना सकता है। स्क्रीन बनाना सेवर वास्तव में मुश्किल नहीं है; एल पर जैसा कि मैं देख सकता हूं पूर्व में नहीं। –