如何在dos/win95下编程得到网卡号

netware 2000-01-30 09:07:00
加精
...全文
556 点赞 收藏 4
写回复
4 条回复
hokesoft 2000年05月24日
Delphi里怎么做呢?!
回复 点赞
wxz 2000年02月13日
// 以下是本人的完整程序段
#ifndef __TCCARD_H
#define __TCCARD_H
#include<dos.h>
#include<stdio.h>
/***************************************************/
/* 函数 取本机器的Novell网络登陆号 */
class CNetAddress
{
private:
unsigned int LoginNumber; // Login 序号
unsigned char CardAddress[13]; // 网卡地址, 16进制
void ReadLoginNumber(void);
void ReadCardAddress(void);
char Num_Char(int numeric); //
public:
CNetAddress()
{
ReadLoginNumber();
ReadCardAddress();
}
int GetLoginNumber(void)
{
return LoginNumber;
}
unsigned char *GetAddress(void)
{
if(CardAddress[0])return CardAddress;
else return NULL;
}
};
#endif //__TCCARD_CPP
/*************************************************************//***************************************************/
/* 函数 取本机器的Novell网络登陆号 */
void CNetAddress::ReadLoginNumber(void)
{
_AH=0xdc;
geninterrupt(0x21);
LoginNumber=_AL;
}
/* 函数 取本机器的Novell网卡地址 */
void CNetAddress::ReadCardAddress(void)
{
union REGS inregs,outregs;
struct SREGS segregs;
CardAddress[0]='\0';
{
inregs.h.ah=0xEE;
intdosx(&inregs,&outregs,&segregs);
CardAddress[0]=Num_Char((outregs.h.ch>>4)&0x0f);
CardAddress[1]=Num_Char(outregs.h.ch&0x0f);
CardAddress[2]=Num_Char((outregs.h.cl>>4)&0x0f);
CardAddress[3]=Num_Char(outregs.h.cl&0x0f);
CardAddress[4]=Num_Char((outregs.h.bh>>4)&0x0f);
CardAddress[5]=Num_Char(outregs.h.bh&0x0f);
CardAddress[6]=Num_Char((outregs.h.bl>>4)&0x0f);
CardAddress[7]=Num_Char(outregs.h.bl&0x0f);
CardAddress[8]=Num_Char((outregs.h.ah>>4)&0x0f);
CardAddress[9]=Num_Char(outregs.h.ah&0x0f);
CardAddress[10]=Num_Char((outregs.h.al>>4)&0x0f);
CardAddress[11]=Num_Char(outregs.h.al&0x0f);
CardAddress[12]='\0';
}
}
char CNetAddress::Num_Char(int numeric)
{
const Asc0=48;
const AscA=65-10;
if((numeric>=0)&&(numeric<=9))
return Asc0+numeric;
if((numeric>=10)&&(numeric<=15))
return AscA+numeric;
return ' ';
}
#endif //__TCCARD_CPP
/*************************************************************/
回复 点赞
netware 2000年02月01日
那么在DOS下呢?
回复 点赞
Wingsun 2000年01月30日
这个为题已经有人提过,
在Win95下,我使用的是BCB4.0,实现方法如下:

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

NCB ncb;
UCHAR uRetCode;
char NetName[50];
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;
uRetCode = Netbios( &ncb );
if (uRetCode!=0)
EdNetAdapterNumber->Text="网卡初始化失败!";
memset(&ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = 0;
strcpy( ncb.ncb_callname, "* " );

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

uRetCode = Netbios( &ncb );
if ( uRetCode == 0 )
{
AnsiString Address;
int i;
Address="";
for(i=0;i<6;i++)
{
Address+=IntToHex((int)Adapter.adapt.adapter_address[i],2);
}
EdNetAdapterNumber->Text=Address ;
}

回复 点赞
发动态
发帖子
通信技术
创建于2007-08-27

2781

社区成员

2.8w+

社区内容

通信技术相关讨论
社区公告
暂无公告