仅适用于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 关闭所有防火墙。