سؤال

هل هناك أي واجهة برمجة تطبيقات Win32 لإيقاظ نظام تم إغلاقه ، في وقت محدد؟ لقد رأيت برنامجًا يدعى AutoPower يمكنه تشغيل النظام عليه في وقت محدد.

هل كانت مفيدة؟

المحلول

حصلت المنشور أدناه من موقع. أي شخص حاول هذا؟

لا شيء في الإطار ، لذلك سيكون عليك "pinvoke" قليلاً. واجهات برمجة التطبيقات التي تحتاجها إلى الاتصال هي CreateWaitableTimer و SetWaitableTimer. فيما يلي عينة كاملة (Q&D) توضح كيف يمكنك تعيين نظام لتستيقظ من النوم/السبات باستخدام API Win32 أعلاه. لاحظ أنه هنا أقوم بإعداد وقت إيقاظ نسبي قدره 300000000 NSECs. هذا يعني أن الكمبيوتر سوف يستيقظ (على افتراض أنه نائم أو سبات) في غضون 30 ثانية بعد تعيين المؤقت. راجع مستندات MSDN للحصول على تفاصيل عن 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");
        }
    }
}

نصائح أخرى

هذه استيقظ على LAN (WOL) قد يكون منشور مشروع الرمز مفيدًا (يجب على كل من اللوحة الأم و NIC دعم WOL)

بمجرد إيقاف تشغيل جهاز الكمبيوتر الخاص بك بالفعل (لا ينام أو سبات) ، لا يمكنك إيقاظه من رمز C#، C ++ مباشرة. بعد كل شيء يتم إغلاق نظام التشغيل نفسه.

الفرصة الوحيدة هي أن تدعم اللوحة الأم الخاصة بك نوعًا من آلية المؤقت. ومع وجود وظيفة C ++ لتتمكن من كتابة بعض العلامات في BIOS وتعيين هذا المؤقت.

استخدم قائمة Windows "المجدولة المهمة". نرى:

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

تقوم بإنشاء برنامج تريد تشغيله عند الاستيقاظ ثم إدخاله يدويًا في قائمة المهام المجدولة Windows لأول مرة للاستيقاظ بعد وقت محدد.

عندما يوقظ البرنامج ، لست متأكدًا مما إذا كنت بحاجة إلى البرنامج الخاص بك للاتصال بأجهزة واجهة برمجة تطبيقات Windows لإيقافه مرة أخرى ، إذا كنت تريد أن يقوم برنامجك بإيقاف تشغيل الكمبيوتر بعد بدء مهمة أخرى من أجل إيقاظه مرة أخرى. بحاجة إلى إعادة صياغة ما هي واجهات برمجة تطبيقات Windows لهذا الغرض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top