我正在尝试在我的程序中添加功能,允许用户在设定的时间内将系统从睡眠状态唤醒。
我在Google上搜索了很多内容,在线示例似乎没有用。
我已经使用WaitableTimer设置系统进入睡眠状态,但它似乎没有醒来。
任何人都可以帮助我。
代码参考,我正在使用WPF
由于
答案 0 :(得分: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);
}
}
}
答案 1 :(得分:0)
是否有其他软件能按计划唤醒您的计算机?您需要确定问题是与您的代码或系统配置有关,并且运行其他人的软件作为测试是最简单的方法。
您可能需要在BIOS中启用“Wake on Timer”支持。
您使用的是哪个版本的Windows? Windows Vista和7附带了一些工具,用于启用/禁用各个组件唤醒系统的能力,以便例如当一个非常敏感的鼠标无意中移动到足以唤醒计算机时解决问题。您可能需要为HPET或RTC组件启用唤醒支持。