请教关于GetAdaptersInfo获取网卡的问题

sych11 2018-02-28 01:31:13
clea
Declare long GetAdaptersInfo in iphlpapi.dll string @pAdapterInfo ,Long @
llen=0
lip=""
=GetAdaptersInfo(@lip,@llen)
lip=REPLICATE(CHR(0),llen)
IF GetAdaptersInfo(@lip,@llen)=0
llen=ASC(SUBSTR(lip,401,1))
lip=SUBSTR(lip,405,llen)
FOR i=1 TO llen
?ASC(SUBSTR(lip,i,1)),RIGHT(TRANSFORM(ASC(SUBSTR(lip,i,1)),"@0"),2)
next
endif

上面的代码是获取网卡MAC地址的,我想得到所有的网卡的IP、网关等信息,实际上上面的变量LIP中已经有相关信息
只是我不知道该怎么输出,烦请朋友出手相助
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO *Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
...全文
674 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sych11 2018-03-01
  • 打赏
  • 举报
回复
想结贴,找不到给分的地方
sych11 2018-02-28
  • 打赏
  • 举报
回复
Local lnNetResource lnNetResource = NetEnumConnections( [TNetEnumConnTable] ) If lnNetResource>0 And Used([TNetEnumConnTable]) Select TNetEnumConnTable Browse *Use In TNetEnumConnTable EndIf Return *--------------------------------------------- * 获取本机网络连接相关信息 *--------------------------------------------- Function NetEnumConnections( tcTableName ) tcTableName = Iif(Type([tcTableName])=[C], tcTableName, [NetEnumResource]+Sys(2015)) Create Cursor (tcTableName) ( RegName C(50), NetCard C(254), MacAddr C(17), IPAddr C(15), IPMask C(15), IPGateWay C(15) ) Local lnSiteWay, lcBuffer, lnBuffer, lcMark, lnResource, liResource, lcResource Declare Integer GetAdaptersInfo In iphlpapi String @pAdapterInfo, Long @pOutBufLen lnResource = 0 lcBuffer = [] lnBuffer = 0 = GetAdaptersInfo( @lcBuffer, @lnBuffer) lcBuffer = Replicate(Chr(0), lnBuffer) = GetAdaptersInfo( @lcBuffer, @lnBuffer) If lnBuffer <> 0 * 也可以利用每个资源占640字节计算资源数 If Len(Alltrim(Getenv([ComputerName])))>0 lcMark = Chr(0)+Chr(0)+Chr(0)+Chr(123) Else lcMark = Chr(255)+Chr(255)+Chr(255)+Chr(63) Endif = Strtofile(lcBuffer,[c:\\temp\\NetEnumResource.txt]) lnResource = Occurs( lcMark, lcBuffer) For liResource = 1 To lnResource lcResource = Substr(lcBuffer, At(lcMark,lcBuffer,liResource)-5, 640) Insert Into (tcTableName) Values ( ; Substr(lcResource, 9, GetLong(lcResource, 9,Replicate(Chr(0),4))), ; Substr(lcResource,269, GetLong(lcResource,269,Replicate(Chr(0),4))), ; ChangHex(Substr(lcResource,405,6),[-]), ; Substr(lcResource,433, GetLong(lcResource,433,Chr(0))), ; Substr(lcResource,449, GetLong(lcResource,449,Chr(0))), ; Substr(lcResource,473, GetLong(lcResource,473,Chr(0))) ) Endfor Endif Return lnResource Endfunc *----------------------------------------------- * NetEnumConnections()函数 内部使用 *----------------------------------------------- Function GetLong( tcResource, lnStart, tcMark ) Local lnFindEnd lnFindEnd = At(tcMark,Substr(tcResource,lnStart),1)-1 Return Iif(lnFindEnd<1, 0, lnFindEnd) Endfunc *----------------------------------------------- * NetEnumConnections()函数 内部使用 *----------------------------------------------- Function ChangHex( tcResource, tcSplit ) Local lcHexStr, liStr lcHexStr = [] For liStr = 1 To Len(tcResource) If Len(tcSplit)>0 lcHexStr = lcHexStr + Iif(liStr=1,"\",tcSplit)+Right(Transform(Asc(Substr(tcResource,liStr,1)),[@0]),2) Else lcHexStr = lcHexStr + Right(Transform(Asc(Substr(tcResource,liStr,1)),[@0]),2) Endif Endfor Return lcHexStr Endfunc
sych11 2018-02-28
  • 打赏
  • 举报
回复
找到了红雨大侠的文章,解决了,谢谢那些默默奉献的人们

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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