获得计算机得硬件信息。

buider 2004-01-02 06:56:31
我想对程序进行硬件绑定,想知道怎样在没有连接网线情况下获取本机得mac地址得方法?
...全文
95 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
goneaway1981 2004-01-12
  • 打赏
  • 举报
回复
注册表有MAC的信息
COpyFRee 2004-01-09
  • 打赏
  • 举报
回复
***
「已注销」 2004-01-07
  • 打赏
  • 举报
回复
学习
yunuo2010000 2004-01-05
  • 打赏
  • 举报
回复
学习
goneaway1981 2004-01-03
  • 打赏
  • 举报
回复
mark
constantine 2004-01-03
  • 打赏
  • 举报
回复
你去www.chinabcb.com论坛的通用函数库看看,里面有很多这方面的代码。
nike_ljq 2004-01-02
  • 打赏
  • 举报
回复
mark
comefirst 2004-01-02
  • 打赏
  • 举报
回复
或者:
#include <nb30.h>
//---------------------------------------------------------------------------
// 因为是通过NetAPI来获取网卡信息,所以需要包含其题头文件nb30.h

typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;

ASTAT Adapter;

// 定义一个存放返回网卡信息的变量
// 输入参数:lana_num为网卡编号,一般地,从0开始,但在Windows 2000中并不一定是连续分配的

AnsiString getmac_one (int lana_num)
{
NCB ncb;
UCHAR uRetCode;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_num;
// 指定网卡号

// 首先对选定的网卡发送一个NCBRESET命令,以便进行初始化
uRetCode = Netbios( &ncb );
//printf( "The NCBRESET return code is:0x%x \n", uRetCode );

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_num; // 指定网卡号

strcpy( (char *)ncb.ncb_callname,"* " );
ncb.ncb_buffer = (unsigned char *) &Adapter;

// 指定返回的信息存放的变量
ncb.ncb_length = sizeof(Adapter);

// 接着,可以发送NCBASTAT命令以获取网卡的信息
uRetCode = Netbios( &ncb );
//printf( "The NCBASTAT is: 0x%x \n", uRetCode );
//printf( "The NCBASTAT return code is: 0x%x \n", uRetCode );

if ( uRetCode == 0 )
{
// 把网卡MAC地址格式化成常用的16进制形式,如0010-A4E4-5802
AnsiString NetSn="";
for (int i=0;i<6;i++)
{
NetSn+=IntToHex(Adapter.adapt.adapter_address[i],2);
}
return NetSn;
/*
printf( "The Ethernet Number[%d]is: %02X%02X-%02X%02X-%02X%02X\n",lana_num,
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] );
*/
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
NCB ncb;
UCHAR uRetCode;
LANA_ENUM lana_enum;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBENUM;

ncb.ncb_buffer = (unsigned char *) &lana_enum;
ncb.ncb_length = sizeof(lana_enum);

// 向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡、每张网卡的编号等
uRetCode = Netbios( &ncb );
//printf( "The NCBENUM returncode is:0x%x \n", uRetCode );
if ( uRetCode == 0 )
{
//printf( "Ethernet Count is : %d\n\n", lana_enum.length);

// 对每一张网卡,以其网卡编号为输入编号,获取其MAC地址
//for ( int i=0; i< lana_enum.length; ++i)
Label1->Caption=getmac_one( lana_enum.lana[0]);
}
}
comefirst 2004-01-02
  • 打赏
  • 举报
回复
AnsiString __fastcall GetMacAddressString(void)
{
//TODO:取网卡的MAC地址。
PIP_ADAPTER_INFO pai = NULL;
PIP_ADDR_STRING pAddrStr;
DWORD dwSize = 0;
CHAR szMac[64];
char temp[256];
AnsiString ReturnMAC="";
// Get size of buffer needed:
GetAdaptersInfo(NULL, &dwSize);

pai = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, dwSize);
GetAdaptersInfo(pai, &dwSize);

PIP_ADAPTER_INFO p = pai;
AnsiString a;
while (p)
{

pAddrStr=&(p->IpAddressList);
a=pAddrStr->IpAddress.String ;
if(a!="0.0.0.0")
{
MacAddressToString(p->Address, szMac, p->AddressLength);
//sprintf(temp,"%s: %s", p->Description, szMac);
sprintf(temp,"%s", szMac);
ReturnMAC=AnsiString(temp);
break;
}
p = p->Next;
}

GlobalFree(pai);
return ReturnMAC;
}

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧