untiy代码控制电脑开关机

仅适用于windows系统

关机

Process.Start("c:/windows/system32/shutdown.exe", "-s -t " + 5);

这是一个系统自带的exe,直接调用即可。

开机
在局域网中,开机使用向网卡发送MAC地址的方式启动。(或者直接设置为通电自启)

    public void RemoteWakeUpComputer(MediaClient mediaClient)//网卡唤醒
    {
        if (string.IsNullOrEmpty(mediaClient.clientMAC)||mediaClient.clientMAC.Length != 17)
        {
            Debug.Log("MAC地址不符合");
            return;
        }
       //网卡唤醒的格式是一遍6个FF加16遍MAC地址
        byte[] macByte = FormatMac(mediaClient.clientMAC);
        byte[] packet = new byte[17 * 6];
        for (int index = 0; index < 6; index++)//先写一遍6个FF
        { 
            packet[index] = 0xFF;
        }
        for (int i = 1; i <= 16; i++)//再写16遍MAC
        {
            for (int j = 0; j < 6; j++)
            { 
                packet[i * 6 + j] = macByte[j];
            }
        }
        //使用udp广播,必须是广播,端口号可以自定义
        IPEndPoint broadcast = new IPEndPoint(IPAddress.Broadcast, 5000);
        this.SendEvent(new OnSendMsg_Byte_UDPSystem(packet,broadcast));//这里用了QF框架,内部就是广播UDP
    }
    private byte[] FormatMac(string macInput)//从00-00-00-00-00-00格式字符串获取网卡地址
    {
        byte[] mac = new byte[6];
        string str = macInput;
        string[] strArray = str.Split('-');
        for (int index = 0; index < 6; index++)
        {
            var byteValue = System.Convert.ToByte(strArray[index], 16);
            mac[index] = byteValue;
        }
        return mac;
    }

1 使用MAC唤醒必须在电脑的bios的电源管理打开网卡唤醒功能,这个功能通常都是默认关闭的。
不同电脑的开启方式不同,通常在ACPI里的PCI-E选项,不同主板的选择方式可能不同。

2 如果你的电脑支持快速启动,需要关闭快速启动,以win10为例,win键,输入“选择电源计划”,点击“选择电源按钮的功能”,如果支持快速启动,关闭它。

3 关闭所有防火墙。

你可能感兴趣的:(unity)