Qt修改mac地址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt修改mac地址相关的知识,希望对你有一定的参考价值。

1.通过修改注册表NetworkAddress实现,如果注册表没有此项,找到DriverDesc描述信息是网卡信息,如Intel(R) Ethernet Connection I218-LM,在此新建字符串NetworkAddress,其值就是mac地址。

 mac地址修改后,要重启网卡。 网卡禁用启用,运行cmd命令netsh interface set interface 本地连接 enabled 和netsh interface set interface 本地连接 disabled。

 

 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>
#include <QSettings>
#include <QString>
#include <QDebug>
#include <QFile>
#include <QMessageBox>
#include <QDir>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}

//const QString strReg="HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\0007";
void MainWindow::on_btnRecover_clicked()
{
  ui->btnRecover->setEnabled(false);
  if(!loadIni())
  {
      ui->btnRecover->setEnabled(true);
      return;
  }
  setButtonStatus(ui->btnModify,false); 
  QSettings *reg=new QSettings(mReg,QSettings::NativeFormat);  
  reg->setValue("NetworkAddress",mOriginal);
  delete reg;
  reg=NULL; 
  reStartNetWork();
  setButtonStatus(ui->btnRecover,true);
  ui->btnRecover->setEnabled(true);

}

void MainWindow::on_btnModify_clicked()
{
    ui->btnModify->setEnabled(false);
    if(!loadIni())
    {
        ui->btnModify->setEnabled(true);
        return;
    }
    setButtonStatus(ui->btnRecover,false);
    QSettings *reg=new QSettings(mReg,QSettings::NativeFormat);
    
    reg->setValue("NetworkAddress",mModify);
    delete reg;
    reg=NULL;
    reStartNetWork();

    setButtonStatus(ui->btnModify,true);
    ui->btnModify->setEnabled(true);
}

void MainWindow::reStartNetWork()
{
   setNetEnabled(false);
   setNetEnabled(true);
}


void MainWindow::setNetEnabled(bool isEnabled)
{
    QStringList cmdlst;
    if(isEnabled)
    {
      cmdlst<<"/c";
      cmdlst<<"netsh interface set interface 本地连接 enabled";
    }
    else
    {
      cmdlst<<"/c";
      cmdlst<<"netsh interface set interface 本地连接 disabled";
    }

    runCMD(cmdlst);
}

void MainWindow::testCmd()
{
    QProcess p(0);
    p.start("cmd", QStringList()<<"/c"<<"ping www.baidu.com");
    p.waitForStarted();
    p.waitForFinished();
    QString strTemp=QString::fromLocal8Bit(p.readAllStandardOutput());

    QMessageBox testMassage;
    testMassage.setText(strTemp);
    testMassage.exec();

}
void MainWindow::runCMD(const QStringList &cmdlst)
{
    QProcess p(0);
    p.start("cmd",cmdlst);
    qDebug()<<cmdlst;
    p.waitForStarted();
    p.waitForFinished();
    qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());


}

void MainWindow::setButtonStatus(QPushButton *btn,bool isClick)
{
    if(isClick)
    {
        btn->setStyleSheet("QPushButton{background-color: rgb(220, 241, 252);"
                           "border-color: rgb(170, 255, 255);"
                           "border-radius: 10px;"
                           "border: 1px solid;"

                           "}");
    }
    else
    {

       btn->setStyleSheet("QPushButton{background-color: rgb(240, 240, 240);"
                          "border-color: rgb(170, 255, 255);"
                          "border-radius: 10px;"
                          "border: 1px solid;"

                          "}");
    }

}

bool MainWindow::loadIni()
{

    if(!QFile::exists(qApp->applicationDirPath()+"\\config.ini"))
    {
        QMessageBox box;
        box.setText("config.ini don‘t exist!");
        box.setStandardButtons(QMessageBox::Ok);
        box.exec();
        return false;
    }

    QSettings *setIni = new QSettings(qApp->applicationDirPath()+"\\config.ini", QSettings::IniFormat);

    mReg=setIni->value("Regedit/reg").toString();
    mOriginal=setIni->value("MacAddress/original").toString();

    mModify=setIni->value("MacAddress/modify").toString();
    return true;
}

 

[Regedit]
#找到DriverDesc值是网卡信息,如Intel(R) Ethernet Connection I218-LM,就是添加此网卡mac地址NetworkAddress的地方#
reg=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007
[MacAddress]
original=ECF4BB4D144F
modify=B8AC6F3F148D
#modify=
#modify=
#modify=

 

以上是关于Qt修改mac地址的主要内容,如果未能解决你的问题,请参考以下文章

Qt实现贪吃蛇简单示例

Qt实现贪吃蛇简单示例

qt如何获取udp发过来的ip获得mac地址

QT获取本机IP和Mac地址

QT 实用代码片段

SnippetsLab for Mac 1.9 中文共享版 – 强大的代码收藏管理工具