2011-02-18 27 views
5

तो, मैं एक ऐसा प्रोग्राम तैयार कर रहा हूं जो सार्वजनिक उपयोग के लिए एक प्रदर्शनी पर खड़ा होगा, और मुझे इसके लिए एक निष्क्रिय स्थिति बनाने का काम मिला। स्क्रीन पर किसी फ़ोल्डर से बस कुछ यादृच्छिक वीडियो प्रदर्शित करें, जैसे स्क्रीनसेवर लेकिन एप्लिकेशन में।कोको मैक ओएसएक्स में एप्लिकेशन निष्क्रिय है या नहीं, यह जानने का सबसे अच्छा तरीका है?

तो उपयोगकर्ता निष्क्रिय होने पर जांच करने का सबसे अच्छा और उचित तरीका क्या है?

मैं किस बारे में सोच रहा हूं वह कुछ प्रकार का वैश्विक टाइमर है जो प्रत्येक उपयोगकर्ता इनपुट पर रीसेट हो जाता है और यदि यह पहुंचता है तो यह 1 मिनट कहता है कि यह निष्क्रिय मोड में जाता है। क्या कोई बेहतर तरीका है?

उत्तर

1

आईओएचआईडी से उपयोगकर्ताओं को निष्क्रिय समय पढ़ने के लिए IOKit के उपयोग को कवर करने वाले this article पर एक नज़र डालें।

1

यह एक मूर्ख सवाल की तरह लग सकता है; लेकिन क्यों न सिर्फ एक संक्षिप्त फ्यूज के साथ एक स्क्रीनसेवर स्थापित किया?

यदि आप उपयोगकर्ता भटक जाते हैं तो आपको किसी भी रीसेट या क्लीनअप करने की आवश्यकता होने पर एनएसएनोटिफिकेशन @ com.apple.screensaver.didstart "के लिए सुन सकते हैं।

संपादित करें: आप स्क्रीन सेवर भी सेट कर सकते हैं; इसे आग लगाने के लिए प्रतीक्षा करें, और फिर जब यह शुरू होता है तो अपनी खुद की चीज करें, जब आप अपने वीडियो प्रदर्शित करते हैं तो स्क्रीन सेवर को रोकना; लेकिन एक स्क्रीन सेवर को उचित तरीके से सेट करना शायद एक अच्छा विचार है।

+0

कि बहुत अच्छा होगा अगर वहाँ जहां किसी भी जिस कार्यक्षमता के लिए मैं देख रहा हूं, उसके साथ अच्छे स्क्रीनसेवर, मेरे ऐप आदि से वीडियो पर कुछ कस्टम जानकारी डालना है :( – tobros91

+0

आपको उस कार्यक्षमता को वैसे भी बनाना होगा; साथ ही यह स्क्रीन सेवर भी बना सकता है। स्क्रीन बनाना सेवर वास्तव में मुश्किल नहीं है; एल पर जैसा कि मैं देख सकता हूं पूर्व में नहीं। –

1

मुझे एक समाधान मिला है जो छुपा प्रबंधक का उपयोग करता है, ऐसा लगता है कि यह कोको में ऐसा करने का तरीका है। (वहाँ कार्बन के लिए एक और समाधान है, लेकिन यह 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-वर्ण सीमा में।

1

UKIdleTimer पर एक नज़र डालें, शायद यह वही है जो आप खोज रहे हैं।

3

आप CGEventSourceSecondsSinceLastEventType

एक क्वार्ट्ज घटना स्रोत के लिए पिछले घटना के बाद से बीता हुआ समय रिटर्न उपयोग कर सकते हैं।

/* 
To get the elapsed time since the previous input event—keyboard, mouse, or tablet—specify kCGAnyInputEventType. 
*/ 
- (CFTimeInterval)systemIdleTime 
{  
    CFTimeInterval timeSinceLastEvent = CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateHIDSystemState, kCGAnyInputEventType); 
    return timeSinceLastEvent; 
} 
2

मैं पराग बाफना के जवाब पर विस्तार कर रहा हूँ। क्यूटी में आप

#include <ApplicationServices/ApplicationServices.h> 

double MyClass::getIdleTime() { 
    CFTimeInterval timeSinceLastEvent = CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateHIDSystemState, kCGAnyInputEventType); 
    return timeSinceLastEvent; 
} 

कर सकते हैं आप भी अपने .pro फाइल करने के लिए रूपरेखा जोड़ने के लिए: here

QMAKE_LFLAGS += -F/System/Library/Frameworks/ApplicationServices.framework 
LIBS += -framework ApplicationServices 

समारोह के प्रलेखन है

संबंधित मुद्दे

 संबंधित मुद्दे