远程开机
1.准备工作:
1 BIOS设置(非常重要)
开机进入BIOS(一般都是按DEL,进入BIOS,接着把网络唤醒功能打开)
主要就是找到 WakeUpOnLAN 设置为Enable .WakeUp By PCI Card 设置为Enable
F10 保存退出 重启之后再关机会发现关机之后网卡灯依然闪烁 (每个电脑网络唤醒功能设置地方不一样,要自己的去找)
2.看下自己电脑有没有 设置快速开启功能 (我用的windown10必须把勾去掉,不然开机没反应)
控制面板-系统和安全-电源选项-选择电源按钮功能-快速启动前面的勾去掉
2.上代码(网上搜搜都是大同小异的代码)
void Dialog::wakeOnLAN(QString strMac)
{
/*将字符串MAC转换成十六进制 存入数组*/
char cstrMacAddr[6];
bool isOK;
for(int j = 0;j < 6; j++){
if(j < 5){
cstrMacAddr[j] = strMac.mid(strMac.indexOf(":",j*3) - 2,2).toInt(&isOK,16);
if(false == isOK)
return ;
}else if(j == 5){
cstrMacAddr[j] = strMac.mid(strMac.indexOf(":",j*3 - 1) + 1,2).toInt(&isOK,16);
if(false == isOK)
return ;
}
}
/*构建一个魔术唤醒包 6字节0xFF 和 16次的 Mac地址*/
QByteArray magicPacket;
/*6个 0xFF*/
for(int i = 0;i < 6; i++){
magicPacket[i] = 0xFF;
}
/*16个 MAC*/
for(int k = 0; k < 16; k++)
{
for(int l = 0; l < 6; l++)
magicPacket[(k+1)*6 + l] = cstrMacAddr[l];
}
QHostAddress FakeAddress;
FakeAddress.setAddress ("192.168.0.255");
QUdpSocket udpSocket;
int length = udpSocket.writeDatagram(magicPacket, 102, FakeAddress, 50209);
qDebug()<<"发送结束 "<<length;
}
调用
void Dialog::on_pushButton_clicked()
{
wakeOnLAN("DC:4A:3E:77:7F:3D");
}
远程关机,重启
1.必须关闭远程电脑防火墙(必须能ping通远程的电脑,不然可能关机无效)
2.先设置计算机允许远程控制关机
1. Win + r 运行程序
2. gpedit.msc 打开组策略管理
3. 计算机配置->Windows设置->安全设置->本地策略->用户权限分配
4. 从远程系统强制关机->添加用户或组 输入Guest->检查名称->确定
5. 拒绝次从网络访问这台计算机->选中Guest->删除
有些电脑运行后,提示为 拒绝访问 ,那么就 再改下 来宾账户状态
3.上代码:
void Dialog::ShutDown(QString strIp,QString strCmd)
{
//m_strIp = strIp;
/*命令的执行过程会阻塞 放入线程执行*/
QProcess cmd;
QString strResult;
QByteArray arrayOut;
//QString strCmd = "shutdown -s -t 5 -m \\\\"; //四个斜杠 转义
strCmd += strIp;
qDebug()<<"关闭电脑:"<<strCmd;
cmd.start(strCmd);
cmd.waitForFinished(); //阻塞可改成 cmd.waitForFinished(1000);
arrayOut = cmd.readAllStandardOutput();
strResult = QString::fromLocal8Bit(arrayOut);
cmd.close();
}
4.关闭方法调用
void Dialog::on_btn_close_clicked()
{
QString strCmd = "shutdown -s -t 5 -m \\\\"; //四个斜杠 转义
ShutDown(ui->lineEdit_ip->text(),strCmd);
}
5.重启方法调用
void Dialog::on_btn_restart_clicked()
{
QString strCmd = "shutdown -r -t 5 -m \\\\"; //四个斜杠 转义
ShutDown(ui->lineEdit_ip->text(),strCmd);
}
说明:前期的电脑设置一定要设置好,不然开机关机功能都无效。