c# मुझे कैसे पता चलेगा कि जब विंडोज नींद या हाइबरनेट मोड में/बाहर जा रहा है?




windows sleep-mode (5)

एक विज़ुअल स्टूडियो 2005 सी + + एमएफसी एप्लीकेशन में आपको इस संदेश के रूप में WM_POWERBROADCAST संदेश की तलाश में अपने संदेश मैप में ON_MESSAGE() जोड़ना होगा:

BEGIN_MESSAGE_MAP(CFrameworkWndDoc, CWindowDocument)
    //{{AFX_MSG_MAP(CFrameworkWndDoc)
    ON_WM_CHAR()
    ON_WM_TIMER()
    //}}AFX_MSG_MAP
    ON_MESSAGE(WM_POWERBROADCAST, OnPowerMsgRcvd)
END_MESSAGE_MAP()

उसके बाद आपको संदेश हैंडलर के लिए सदस्य फ़ंक्शन को घोषित करने के लिए कक्षा परिभाषा में बदलाव के साथ संदेश हैंडलर फ़ंक्शन को जोड़ना होगा ताकि आप इस प्रकार के कंकाल में संदेश प्रकार के लिए wParam वैरिएबल की जांच कर सकें:

// Handle the WM_POWERBROADCAST message to process a message concerning power management
// such as going to Sleep or Waking Up.
LRESULT CFrameworkWndDoc::OnPowerMsgRcvd(WPARAM wParam, LPARAM lParam)
{
    switch (wParam) {
        case PBT_APMPOWERSTATUSCHANGE:
            TRACE0("PBT_APMPOWERSTATUSCHANGE  received\n");
            break;
        case PBT_APMRESUMEAUTOMATIC:
            TRACE0("PBT_APMRESUMEAUTOMATIC  received\n");
            break;
        case PBT_APMRESUMESUSPEND:
            TRACE0("PBT_APMRESUMESUSPEND  received\n");
            break;
        case PBT_APMSUSPEND:
            TRACE0("PBT_APMSUSPEND  received\n");
            break;
    }

    return 0;
}

मैंने जो देखा है वह यह है कि उपरोक्त एक विंडोज 7 पर चलने वाले एक आवेदन में प्रयोग किया जाता है जो डीबगर में शुरू हुआ है और फिर मैन्युअल रूप से अपने पीसी को मैं स्लीप करने के लिए चल रहा हूं I को निम्न संदेश दिखाई देगा:

PBT_APMSUSPEND  received

फिर जब पीसी पुनरारंभ होता है और मैं साइन-इन करता हूं जो डीबगर आउटपुट विंडो में दिखाई देगी तो दूसरे के बाद दो संदेश एक होंगे:

PBT_APMRESUMESUSPEND  received
PBT_APMRESUMEAUTOMATIC  received

यह सब कुछ जो मैंने पाया है अब तक यह इंगित करता है कि आपको कोई संकेत नहीं है कि आप नींद की स्थिति या सीतनिद्रा में होना राज्य से बाहर आ रहे हैं या नहीं। मैं अभी भी आगे और शोध कर रहा हूं कि जब निलंबित या फ़ाइल और डिवाइस के हैंडल के रूप में फिर से शुरू होने पर क्या किया जाना चाहिए। मैंने संकेत देखे हैं कि कॉम बंदरगाहों को फ़ाइल संभालता है जो अब शुरू होने के बाद मान्य नहीं हैं। उदाहरण के डेटाबेस कनेक्शन के लिए मैं अन्य प्रक्रियाओं के इंटरफेस के बारे में भी अनिश्चित हूँ

मानक नींद और हाइबरनेट पावर मैनेजमेंट राज्यों के अलावा, माइक्रोसॉफ्ट ने विंडोज 8 और 8.1 के साथ कनेक्टेड स्टैंडबाय पावर स्टेट की शुरुआत की है, जिसमें आवेदन के प्रकार के आधार पर कुछ एप्लिकेशन डिज़ाइन के असर हैं।

डेस्कटॉप अनुप्रयोगों को आम तौर पर जुड़े स्टैंडबाय के साथ एकीकृत करने के लिए कोई अतिरिक्त कार्य की आवश्यकता नहीं होती है

डेस्कटॉप गतिविधि मॉडरेटर (डीएएम) एक Windows घटक है जो सभी डेस्कटॉप अनुप्रयोगों को रोकता है और कनेक्टिविटी स्टैंडबाय के दौरान तृतीय-पक्ष सिस्टम सेवाओं के रनटाइम को थ्रॉटल करता है डीएएम का उद्देश्य मौजूदा अनुप्रयोगों और सेवाओं के साथ बुनियादी सॉफ्टवेयर संगतता बनाए रखना है, लेकिन नींद के दौरान बैटरी जीवन पर उनके प्रभाव को कम करना है।

डीएएम चरण पूरा होने के बाद विंडोज़ डेस्कटॉप अनुप्रयोगों को किसी भी हिस्से के चलने से रोकता है। विंडोज़ डीएएम चरण को पूरा करने के बाद थ्रॉस्ट-पार्टी सिस्टम सेवाओं को थ्रॉटल मोड में निष्पादित करने की सुविधा देता है। इस मोड में, तीसरे पक्ष की सेवा हर 30 सेकंड में दीवार घड़ी की एक से अधिक सेकंड के लिए चला सकती है।

लिन मेरिल द्वारा इंटेल में सुशोभित आवेदन निलंबन की कला विंडोज के तहत पावर प्रबंधन से जुड़ी विभिन्न विंडोज संदेश प्रकारों को संभालने के बारे में कुछ जानकारी है, हालांकि यह तारीख 2005 है इसलिए सभी सामग्री Windows XP के बाद विंडोज से संबंधित हो सकती है। इस दस्तावेज़ में वर्णित संदेश अनुक्रम में कम से कम एक संदेश का उपयोग अब नहीं किया गया है जैसा कि Windows Vista PBT_APMQUERYSUSPEND संदेश से PBT_APMQUERYSUSPEND होता है जिसका अनुरोध किया गया था कि क्या निलंबित करने के लिए कोई एप्लिकेशन उपयोग नहीं कर रहा है Windows द्वारा अब उपयोग नहीं किया जाएगा SetThreadExecutionState() फ़ंक्शन अब यह इंगित करने के लिए उपयोग किया जाता है कि किसी थ्रेड को स्लीप या सीतनिद्रा में होना राज्य के परिवर्तन के साथ बाधित नहीं किया जा सकता है। स्टैकहोवरफ्लो में दिए गए उत्तर देखें पावर प्रबंधन राज्य संदेश परिवर्तनों पर विवरण के लिए नींद निलंबित संदेश (winxp) नहीं पकड़ सकता

क्या किसी विंडोज इवेंट की सदस्यता लेना संभव है, जब विंडोज़ हो रहा है या नींद या सीतनिद्रा में होना राज्य से बाहर आ रहा है?

मुझे अपने आवेदन की आवश्यकता है जब कम्प्यूटर कुछ सफाई करने के लिए सोता जा रहा है और समय की समस्याओं से बचने के लिए जागरूक होने की आवश्यकता है जब यह नींद से निकलता है



Microsoft.Win32.SystemEvents.PowerModeChanged घटना आपको यह जानकारी देगा। यह इवेंट अब तक माइक्रोसॉफ्ट द्वारा जारी किए गए .NET ढांचे के सभी रूपों में उपलब्ध है।


आप NetworkChange के लिए सदस्यता ले सकते हैं। नेटवर्कअवैधलाभरण और नेटवर्क बदलें.नेटवर्कअधिकरण परिवर्तित

मैं आम तौर पर एक दो सेकंड टाइमर शुरू करता हूं ताकि जब यह समय निकल जाए तो मैं नींद मोड में होने के बाद नेटवर्क संचार को फिर से शुरू कर सकता हूं।


सुनिश्चित नहीं है कि आप कितनी बार इसकी निगरानी करना चाहते हैं, लेकिन अगर आप .NET में एक सेवा लिखते हैं, तो आप सर्विसबेस को ओवरराइड कर सकते हैं, CanHandlePowerEvent को सही पर सेट कर सकते हैं, और फिर आपको PowerBroadcastStatus गणना के माध्यम से पावर परिवर्तनों के बारे में सूचित किया जाएगा।





hibernate-mode