2010-10-01 117 views
0

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

我已经搜索了很多关于这个和网上的例子似乎并没有工作。

我用WaitableTimer设置系统进入睡眠状态,但似乎没有醒来。

任何人都可以帮助我在这里。

代码参考,我使用WPF

感谢

+0

你是什么意思的“系统” - 操作系统,即Windows或您的应用程序? “睡眠”状态和“醒来”事件实际上是什么意思?我认为有更多的方法来理解你的问题。 – 2010-10-01 14:11:50

+0

当我的意思是系统,我的意思是机器,睡眠状态意味着当你可以设置系统进入睡眠状态,因为有睡眠和休眠状态,我想从应用程序中唤醒它。我读到WaitableTimer实际上在系统睡着时仍然运行,但无法使其工作。 – 2010-10-01 14:16:40

+1

你不是以智能方式提出这个问题。您对SetWaitableTimer或pinvoke声明的调用肯定有问题。或者你的错误检查呼叫。邮政编码。 – 2010-10-01 15:46:58

回答

0

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

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

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

+0

嗨,我正在使用Windows 7 x64旗舰版,我已经启用了在电源选项设置中使用唤醒计时器,但没有任何反应,我只能找到另外一个唤醒计时器,但它似乎不是开源的。 – 2010-10-01 14:54:14

+0

所以你按照这里的说明:http://support.microsoft.com/kb/973454?内置的任务计划可以唤醒计算机,尝试此操作(Vista操作说明,但也适用于7):http://www.winvistaclub.com/t86.html – 2010-10-01 15:24:01

0

你有没有(使用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); 
     } 

    } 
} 
+0

资料来源:http://www.expertcore.org/viewtopic.php?style=4&f=10&t=1448 – Aliostad 2010-10-01 14:18:08

+0

我实际上试图远离局域网唤醒,因为大多数用户将使用无线适配器,而这不是' t明显支持。 – 2010-10-01 14:54:54