0

我正在尝试在我的程序中添加功能,允许用户在设定的持续时间内将系统从睡眠中唤醒。

我已经用谷歌搜索了很多关于此的内容,并且在线示例似乎不起作用。

我已经使用 WaitableTimer 将系统设置为进入睡眠状态,但它似乎没有醒来。

有谁可以帮我离开这里吗。

对于代码参考,我正在使用 WPF

谢谢

4

2 回答 2

0

您是否尝试过 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); 
        }

    }
}
于 2010-10-01T14:17:08.757 回答
0

是否有任何其他软件能够按时唤醒您的计算机?您需要找出问题出在您的代码还是系统配置上,并且运行其他人的软件作为测试是最简单的方法。

您可能需要在 BIOS 中启用“定时器唤醒”支持。

您使用的是什么版本的 Windows?Windows Vista 和 7 附带了一些工具,用于启用/禁用单个组件唤醒系统的能力,以便解决例如当非常敏感的鼠标意外移动到足以唤醒计算机时出现的问题。您可能需要启用对 HPET 或 RTC 组件的唤醒支持。

于 2010-10-01T14:22:14.693 回答