2011-09-30 7 views
11

मैं इस कोड का उपयोग Windows XP पर मैक पते प्राप्त करने का प्रयास कर रहा हूँ में खिड़कियों पर पता:प्राप्त मैक क्यूटी

QString getMacAddress() 
{ 
QString macaddress="??:??:??:??:??:??"; 
#ifdef Q_WS_WIN 
PIP_ADAPTER_INFO pinfo=NULL; 

unsigned long len=0; 
unsigned long nError; 

if (pinfo!=NULL) 
delete (pinfo); 

nError = GetAdaptersInfo(pinfo,&len); //Have to do it 2 times? 

if(nError != 0) 
{ 
pinfo= (PIP_ADAPTER_INFO)malloc(len); 
nError = GetAdaptersInfo(pinfo,&len); 
} 

if(nError == 0) 
macaddress.sprintf("%02X:%02X:%02X:%02X:%02X:%02X",pinfo->Address[0],pinfo->Address[1],pinfo->Address[2],pinfo->Address[3],pinfo->Address[4],pinfo->Address[5]); 
#endif 
return macaddress; 
} 

कोड यहाँ सुझाव दिया गया था: http://www.qtforum.org/post/42589/how-to-obtain-mac-address.html#post42589

क्या पुस्तकालयों मैं शामिल होना चाहिए इसे बनाने के लिए काम?।

उत्तर

37
क्यूटी और QtNetwork मॉड्यूल के साथ

, आप ऐसा मैक पतों में से एक प्राप्त कर सकते हैं:

QString getMacAddress() 
{ 
    foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces()) 
    { 
     // Return only the first non-loopback MAC Address 
     if (!(netInterface.flags() & QNetworkInterface::IsLoopBack)) 
      return netInterface.hardwareAddress(); 
    } 
    return QString(); 
} 
+1

विंडोज और एमएसवीसी कंपाइलर पर, आपको QNetworkInterface चर "इंटरफ़ेस" को किसी और चीज़ के साथ प्रतिस्थापित करना चाहिए, अन्यथा असफल संकलन। स्पष्टीकरण के लिए यह धागा भी देखें: http://qt-project.org/forums/viewthread/19133 –

+1

उबंटू पर भी काम करता है – PedroMorgan

+0

जब एंड्रॉइड पर वाईफाई कनेक्ट नहीं होता है, तो इंटरफ़ेस लूपबैक बन जाता है और 'हार्डवेयर एड्रेस()' '00 के रूप में पढ़ता है : 00: 00: 00: 00: 00'। –

3

मैं एक ही लिए देख रहा था और आभासी मशीनों और पदाधिकारियों के विभिन्न प्रकार के साथ कुछ समस्या थी, यहाँ एक और है दृष्टिकोण जो मैंने पाया:

QNetworkConfiguration nc; 
QNetworkConfigurationManager ncm; 
QList<QNetworkConfiguration> configsForEth,configsForWLAN,allConfigs; 
// getting all the configs we can 
foreach (nc,ncm.allConfigurations(QNetworkConfiguration::Active)) 
{ 
    if(nc.type() == QNetworkConfiguration::InternetAccessPoint) 
    { 
     // selecting the bearer type here 
     if(nc.bearerType() == QNetworkConfiguration::BearerWLAN) 
     { 
      configsForWLAN.append(nc); 
     } 
     if(nc.bearerType() == QNetworkConfiguration::BearerEthernet) 
     { 
      configsForEth.append(nc); 
     } 
    } 
} 
// further in the code WLAN's and Eth's were treated differently 
allConfigs.append(configsForWLAN); 
allConfigs.append(configsForEth); 
QString MAC; 
foreach(nc,allConfigs) 
{ 
    QNetworkSession networkSession(nc); 
    QNetworkInterface netInterface = networkSession.interface(); 
    // these last two conditions are for omiting the virtual machines' MAC 
    // works pretty good since no one changes their adapter name 
    if(!(netInterface.flags() & QNetworkInterface::IsLoopBack) 
      && !netInterface.humanReadableName().toLower().contains("vmware") 
      && !netInterface.humanReadableName().toLower().contains("virtual")) 
    { 
     MAC = QString(netInterface.hardwareAddress()); 
     break; 
    } 
}