Система пробуждения от Sleep C # - PullRequest
0 голосов
/ 01 октября 2010

Я пытаюсь добавить функциональность в моей программе, которая позволит пользователю выводить их систему из спящего режима через установленную продолжительность.

Я много гуглял по этому поводу, и примеры в Интернете этого не делаютпохоже, работает.

Я использовал WaitableTimer, чтобы система перешла в спящий режим, но, похоже, она не просыпается.

Может кто-нибудь помочь мне здесь.

для ссылки на код я использую WPF

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 октября 2010

Может ли другое программное обеспечение разбудить ваш компьютер по расписанию? Вам необходимо выяснить, связана ли проблема с вашим кодом или с конфигурацией вашей системы, и проще всего запустить чужое программное обеспечение в качестве теста.

Возможно, вам потребуется включить поддержку «Wake on Timer» в BIOS.

Какую версию Windows вы используете? Windows Vista и 7 поставляются с некоторыми инструментами для включения / отключения возможности отдельных компонентов пробуждать систему, например, для разрешать проблемы, когда очень чувствительная мышь непреднамеренно двигается, чтобы разбудить компьютер. Возможно, вам потребуется включить поддержку пробуждения для компонентов HPET или RTC.

0 голосов
/ 01 октября 2010

Вы пробовали Wake On LAN (с использованием MAC-адреса):

namespace WakeOnLan
{
    class Program
    {
        static void Main(string[] args)
        {
            if(args.Length==1)
            {
                string bytes = args[0].Replace("-", "");
                long l = 0;
                if (bytes.Length != 12 || !long.TryParse(bytes.Substring(0, 6), NumberStyles.HexNumber, null, out l) || !long.TryParse(bytes.Substring(6), NumberStyles.HexNumber, null, out l))
                    Console.WriteLine("Invalid string");
                else
                {
                    try
                    {
                        WakeOnLan(bytes);
                        Console.WriteLine("Sent wake on lan");
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());
                    }
                }
            }
            else
            {
                Console.WriteLine("WakeOnLan.exe <MAC Address>\r\nMAC address must be 6 bytes in hexadecimal format, optionally separated by hyphen.");
            }
        }

        private static void WakeOnLan(string bytesString)
        {
            List<byte> packet = new List<byte>();
            for (int i = 0; i < 6; i++)
            {
                packet.Add(byte.Parse(bytesString.Substring(i*2,2),NumberStyles.HexNumber));
            }

            byte[] mac = packet.ToArray();
            for (int i = 0; i < 15; i++)
            {
                packet.AddRange(mac);
            }
            for (int i = 0; i < 6; i++)
            {
                packet.Insert(0, 0xFF);
            }

            UdpClient client = new UdpClient();
            client.Connect(IPAddress.Broadcast, 7); //Any UDP port will work, but 7 is my lucky number ... 
            client.Send(packet.ToArray(), packet.Count); 
        }

    }
}
...