可否给个获取客户端MAC地址的ACTIVEX的代码啊?

解决方案 »

  1.   

    #include <Nb30.h>
    #include <httpext.h> int CLocalMacCtrl::getMAC(char *mac)
    {
    NCB ncb;     
    typedef struct _ASTAT_     
    {
    ADAPTER_STATUS   adapt;  
    NAME_BUFFER   NameBuff   [30];     
    }ASTAT,   *   PASTAT;     
    ASTAT Adapter;     
        
    typedef struct _LANA_ENUM     
    {   //   le 
    UCHAR   length;  
    UCHAR   lana[MAX_LANA];     
    }LANA_ENUM   ;     
    LANA_ENUM lana_enum;     
        
    UCHAR uRetCode;     
    memset(&ncb, 0, sizeof(ncb));     
    memset(&lana_enum, 0, sizeof(lana_enum));     
        
    ncb.ncb_command = NCBENUM;     
    ncb.ncb_buffer = (unsigned char *)&lana_enum;     
    ncb.ncb_length = sizeof(LANA_ENUM);     
    uRetCode = Netbios(&ncb);     
    if(uRetCode != NRC_GOODRET)     
    return uRetCode;     
        
    for(int lana=0; lana<lana_enum.length; lana++)     
    {
    ncb.ncb_command = NCBRESET; 
    ncb.ncb_lana_num = lana_enum.lana[lana]; 
    uRetCode = Netbios(&ncb);   
    if(uRetCode == NRC_GOODRET)  
    break; 

    if(uRetCode != NRC_GOODRET)
    return uRetCode;     
        
    memset(&ncb, 0, sizeof(ncb));  
    ncb.ncb_command = NCBASTAT;  
    ncb.ncb_lana_num = lana_enum.lana[0];
    strcpy((char*)ncb.ncb_callname, "*"); 
    ncb.ncb_buffer = (unsigned char *)&Adapter;
    ncb.ncb_length = sizeof(Adapter);
    uRetCode = Netbios(&ncb);  
    if(uRetCode != NRC_GOODRET)   
    return uRetCode;     
    sprintf(mac,"%02X-%02X-%02X-%02X-%02X-%02X",     
    Adapter.adapt.adapter_address[0],     
    Adapter.adapt.adapter_address[1],     
    Adapter.adapt.adapter_address[2],     
    Adapter.adapt.adapter_address[3],     
    Adapter.adapt.adapter_address[4],     
    Adapter.adapt.adapter_address[5]  
    ); 
    return 0;   
    }
      

  2.   

    我有一个现成的,不过不在这台电脑上.其实很简单,你写一个简单ATL组件,在组件的接口中使用楼上的代码就可以了。几分钟的事