Qt 远程开关机 WakeOnLAN 重启

远程开机

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);
}

说明:前期的电脑设置一定要设置好,不然开机关机功能都无效。

         

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值