【问题标题】:Wake System from Sleep C#从睡眠 C# 唤醒系统
【发布时间】:2010-10-01 14:07:46
【问题描述】:

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

我已经在 Google 上搜索了很多关于此的内容,但网上的示例似乎不起作用。

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

谁能帮帮我。

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

谢谢

【问题讨论】:

  • 您所说的“系统”是什么意思——操作系统,即 Windows,还是您的应用程序? “睡眠”状态和“唤醒”事件究竟是什么意思?我认为有更多方法可以理解您的问题。
  • 当我指的是系统时,我指的是机器,睡眠状态是指您可以将系统设置为睡眠的时间,因为有睡眠和休眠状态,我想从我的应用程序中将其从睡眠中唤醒。我读到 WaitableTimer 实际上在系统休眠时仍然运行,但无法让它工作。
  • 你问这个问题不是聪明的方式。您对 SetWaitableTimer 或 pinvoke 声明的调用肯定有问题。或者您对呼叫的错误检查。邮政编码。

标签: c# wpf wakeup


【解决方案1】:

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

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

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

【讨论】:

  • 嗨,我使用的是 Windows 7 x64 Ultimate,并且我在电源选项设置中启用了唤醒定时器的使用,但没有任何反应,我只能找到另一个唤醒定时器,但它没有似乎是开源的。
  • 所以您按照此处的说明进行操作:support.microsoft.com/kb/973454 ?内置的任务计划可以唤醒电脑,试试这个(Vista的说明,但也适用于7):winvistaclub.com/t86.html
【解决方案2】:

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

    }
}

【讨论】:

  • 我实际上是想远离 LAN 唤醒,因为我的大多数用户将使用无线适配器,而这显然不受支持。
猜你喜欢
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 2012-10-08
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多