2010-10-31 15 views
9

क्या कोई निश्चित समय पर बंद होने वाली प्रणाली को जागने के लिए कोई Win32 API है? मैंने ऑटोपावर ऑन नामक एक प्रोग्राम देखा है जो सिस्टम को निर्दिष्ट समय पर पावर करने में सक्षम है।सी #: सिस्टम को कैसे जगाया जा सकता है जो बंद हो गया है?

+3

आप इस सी # प्रोग्राम को कब चलाएंगे? जबकि कंप्यूटर बंद है? या इससे पहले कि यह बंद हो गया है? – Gabe

+0

मैं इसे बंद करने से पहले इस कार्यक्रम को चलाता हूं। – vishnu

+0

आपको एसीपीआई में खोदने की जरूरत है। कुछ गुगलिंग का कहना है कि आप इसे डब्लूएमआई के साथ एक्सेस कर सकते हैं, लेकिन मुझे यकीन नहीं है कि किस हद तक। – Brad

उत्तर

11

गॉट ए साइट से the below post। किसी भी शरीर ने यह कोशिश की?

ढांचे में कुछ भी नहीं, तो आपको थोड़ा "PInvoke" करना होगा। एपीआई को आपको कॉल करने की आवश्यकता है CreateWaitableTimer और SetWaitableTimer। निम्नलिखित पूर्ण है (Q & डी) नमूना जो दिखाता है कि आप सिस्टम को ऊपर Win32 API के उपयोग से नींद/हाइबरनेट से जागने के लिए कैसे सेट कर सकते हैं। ध्यान दें कि यहां मैं 300000000 एनएसईसी के सापेक्ष वेकअप समय निर्धारित कर रहा हूं। इसका मतलब है कि कंप्यूटर टाइमर सेट करने के बाद 30 सेकंड के भीतर जाग जाएगा (लगता है कि वह सो रहा है या हाइबरनेटिंग)। SetWaitableTimer और इसके तर्कों के विवरण के लिए एमएसडीएन दस्तावेज़ों से परामर्श लें।

using System; 
using System.Runtime.InteropServices; 
using System.Windows.Forms; 

namespace Willys 
{ 
    class Program 
    { 
     [DllImport("kernel32.dll")] 
     public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, 
     bool bManualReset, string lpTimerName); 

     [DllImport("kernel32.dll")] 
     public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long 
     pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr 
     lpArgToCompletionRoutine, bool fResume); 

     [DllImport("kernel32", SetLastError = true, ExactSpelling = true)] 
     public static extern Int32 WaitForSingleObject(IntPtr handle, uint 
     milliseconds); 

     static void Main() 
     { 
      SetWaitForWakeUpTime(); 
     } 

     static IntPtr handle; 
     static void SetWaitForWakeUpTime() 
     { 
      long duetime = -300000000; // negative value, so a RELATIVE due time 
      Console.WriteLine("{0:x}", duetime); 
      handle = CreateWaitableTimer(IntPtr.Zero, true, "MyWaitabletimer"); 
      SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true); 
      uint INFINITE = 0xFFFFFFFF; 
      int ret = WaitForSingleObject(handle, INFINITE); 
      MessageBox.Show("Wake up call"); 
     } 
    } 
} 
+4

मैंने प्रोग्राम संपादित किया ताकि यह काम करे। मैंने सत्यापित किया है कि यह मेरे कंप्यूटर को नींद और हाइबरनेशन से जगाता है। मैं उम्मीद नहीं करता कि यह शट डाउन होने से जागने की उम्मीद है। – Gabe

+0

@Gabe: ठीक है। – vishnu

+0

संपादन के लिए धन्यवाद मैंने विंडोज 8 डेस्कटॉप और टैबलेट पर इस कोड को आजमाया है लेकिन यह काम नहीं करता है। क्या मुझे इस सुविधा का समर्थन करने वाले मेरे डिवाइस के साथ कुछ करना है या सभी डिवाइस जागने के विकल्प का समर्थन करेंगे?मैंने उन्नत पावर सेटिंग्स में नींद विकल्प के तहत स्वीट वेक टाइमर विकल्प पर एक नज़र डाली थी, लेकिन डेस्कटॉप डिंट वर्क और टैबलेट डिन पर भी इसे बदलकर –

2

यह Wake on LAN (WOL) कोड परियोजना के बाद काम का हो सकता (दोनों मदरबोर्ड और एनआईसी WOL का समर्थन करना चाहिए)

2

एक बार जब आप वास्तव में अपने कंप्यूटर को शट डाउन (सो या सुप्तावस्था में नहीं) तो आप सीधे सी # से यह जगा नहीं कर सकते, सी ++ कोड। सभी ओएस खुद बंद होने के बाद।

आपके मदरबोर्ड के लिए किसी प्रकार का टाइमर तंत्र का समर्थन करने का एकमात्र मौका होगा। और कुछ सी ++ फ़ंक्शन BIOS में कुछ झंडे लिखने और उस टाइमर को सेट करने में सक्षम होने के साथ।

-1

विंडोज़ "अनुसूचित कार्य" मेनू का उपयोग करें। देखें:

http://www.howtogeek.com/119028/how-to-make-your-pc-wake-from-sleep-automatically/

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

जब आप प्रोग्राम जागता है, मुझे यकीन है कि अगर आप अपने कार्यक्रम रोक इसे फिर से awoken जा रहा है, डिट्टो करने के लिए एक Windows API कॉल करने के लिए यदि आप इसे जगाने के लिए एक और sceduled काम शुरू करने के बाद पीसी पावर बंद करने के लिए अपने कार्यक्रम चाहते हैं की जरूरत है नहीं कर रहा हूँ फिर। इसके लिए विंडोज़ एपीआई के पुनर्विक्रय की आवश्यकता है।

+1

यह एक गैर-प्रोग्रामिंग उत्तर है जो सुपरयूसर के लिए उपयुक्त होगा। यह प्रोग्रामिंग प्रश्न का उत्तर नहीं देता है, जिसे पूछा गया था, हालांकि, सी # से जागने को कॉन्फ़िगर करने की आवश्यकता है। –

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