zoukankan      html  css  js  c++  java
  • Qt 在Windows下设置Wifi连接和有线连接

    Wifi连接-自动获取IP

    实现程序如下:

    // 设置网络为DHCP
    QProcess cmd;
    cmd.start(QString("netsh interface ip set address "%1" dhcp").arg("WLAN"));
    cmd.waitForStarted();
    cmd.waitForFinished();
    QString strCmdOut = QString::fromLocal8Bit(cmd.readAllStandardOutput());
    // 有时候执行命令后等待时间太短,已连接wifi还没来得及可以正常使用,则会返回"
    "
    // 但实际已经成功启用DHCP。(必须先连接wifi,才能正常启用DHCP)
    if (strCmdOut.contains("已在此接口上启用 DHCP。") || strCmdOut == "
    ")
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("自动获取IP成功", SuccessIcon);
        pPromptBox->exec();
    }
    else
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("自动获取IP失败", FailIcon);
        pPromptBox->exec();
    }
    

    Wifi连接-手动获取IP

    实现程序如下:

    // 1. 设置为静态IP
    QString strCommand("netsh interface ip set address");
    
    // 2. 执行CMD命令
    strCommand += QString(""%1" ").arg("WLAN");
    strCommand += QString("static %1 ").arg(m_pEditIP->text());
    strCommand += QString("%1 ").arg(m_pEditMask->text());
    strCommand += QString("%1").arg(m_pEditGway->text());
    QProcess cmd;
    cmd.start(strCommand);
    cmd.waitForStarted();
    cmd.waitForFinished();
    // cmd.readAllStandardError()这些信息只能输出一次,所以要赋值给临时QString
    // 有线连接和wifi网卡的IP不能设置为一样的,否则会提示:"对象已存在"
    QString strCmdOut = QString::fromLocal8Bit(cmd.readAllStandardOutput());
    QString strError = QString::fromLocal8Bit(cmd.readAllStandardError());
    qDebug() << "设置为静态IP_strCmdOut: " << strCmdOut;
    qDebug() << "设置为静态IP_error: " << strError;
    // 判断cmd是否执行成功
    if (strCmdOut.contains("address"))
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("无效IP参数", PromptIcon);
        pPromptBox->exec();
    }
    else if (strCmdOut.contains("mask"))
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("无效mask参数", PromptIcon);
        pPromptBox->exec();
    }
    else if (strCmdOut.contains("gateway"))
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("无效gateway参数", PromptIcon);
        pPromptBox->exec();
    }
    else if (strCmdOut == "
    " && strError == "")
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("手动设置成功", SuccessIcon);
        pPromptBox->exec();
    
        this->accept();
        emit NetConfigSuc(); // 发射网络配置成功的信号
    }
    else if (strCmdOut.contains("对象已存在。"))
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("网络配置未改动", SuccessIcon);
        pPromptBox->exec();
    
        this->accept();
        emit NetConfigSuc(); // 发射网络配置成功的信号
    }
    else
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("手动设置失败", FailIcon);
        pPromptBox->exec();
    }
    

    有线连接-自动获取IP

    实现程序如下:

    // 设置网络为DHCP
    QProcess cmd;
    cmd.start(QString("netsh interface ip set address "%1" dhcp").arg("以太网"));
    cmd.waitForStarted();
    cmd.waitForFinished();
    QString strCmdOut = QString::fromLocal8Bit(cmd.readAllStandardOutput());
    // 有时候执行命令后等待时间太短,已连接wifi还没来得及可以正常使用,则会返回"
    "
    // 但实际已经成功启用DHCP。(必须先连接wifi,才能正常启用DHCP)
    if (strCmdOut.contains("已在此接口上启用 DHCP。") || strCmdOut == "
    ")
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("自动获取IP成功", SuccessIcon);
        pPromptBox->exec();
    }
    else
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("自动获取IP失败", FailIcon);
        pPromptBox->exec();
    }
    

    有线连接-手动获取IP

    实现程序如下:

    // 1. 设置为静态IP
    QString strCommand("netsh interface ip set address");
    
    // 2. 执行CMD命令
    strCommand += QString(""%1" ").arg("以太网");
    strCommand += QString("static %1 ").arg(m_pEditIP->text());
    strCommand += QString("%1 ").arg(m_pEditMask->text());
    strCommand += QString("%1").arg(m_pEditGway->text());
    QProcess cmd;
    cmd.start(strCommand);
    cmd.waitForStarted();
    cmd.waitForFinished();
    // cmd.readAllStandardError()这些信息只能输出一次,所以要赋值给临时QString
    // 有线连接和wifi网卡的IP不能设置为一样的,否则会提示:"对象已存在"
    QString strCmdOut = QString::fromLocal8Bit(cmd.readAllStandardOutput());
    QString strError = QString::fromLocal8Bit(cmd.readAllStandardError());
    qDebug() << "设置为静态IP_strCmdOut: " << strCmdOut;
    qDebug() << "设置为静态IP_error: " << strError;
    // 判断cmd是否执行成功
    if (strCmdOut.contains("address"))
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("无效IP参数", PromptIcon);
        pPromptBox->exec();
    }
    else if (strCmdOut.contains("mask"))
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("无效mask参数", PromptIcon);
        pPromptBox->exec();
    }
    else if (strCmdOut.contains("gateway"))
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("无效gateway参数", PromptIcon);
        pPromptBox->exec();
    }
    else if (strCmdOut == "
    " && strError == "")
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("手动设置成功", SuccessIcon);
        pPromptBox->exec();
    
        this->accept();
        emit NetConfigSuc(); // 发射网络配置成功的信号
    }
    else if (strCmdOut.contains("对象已存在。"))
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("网络配置未改动", SuccessIcon);
        pPromptBox->exec();
    
        this->accept();
        emit NetConfigSuc(); // 发射网络配置成功的信号
    }
    else
    {
        MyPromptBox *pPromptBox = new MyPromptBox;
        pPromptBox->setLabInfo("手动设置失败", FailIcon);
        pPromptBox->exec();
    }
    

    完整工程的GitHub链接

    https://github.com/confidentFeng/VSAppProject/tree/NetControl


  • 相关阅读:
    MySQL SQL语句总结
    JavaFx通用查询、跳转创建、修改页面、关闭舞台工具类
    反射工具类
    SpringBoot将数据写入word模板,生成word文档
    vscode设置中文的方法
    Flex 布局
    处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler” •使用了托管的处理程序,但是未安装或未完整安装 ASP.NET。
    第一周助教总结
    JS时间转换
    ES 安装常见错误
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/12870680.html
Copyright © 2011-2022 走看看