易语言调用api枚举网卡名称并且获取信息的代码

DLL命令表

.版本 2

.DLL命令 GetProcAddress, 整数型, "kernel32", "GetProcAddress", , 返回函数地址

.参数 hModule, 整数型

.参数 lpProcName, 文本型

.DLL命令 GetModuleHandle, 整数型, "kernel32", "GetModuleHandleA", , 获取一个应用程序或动态链接库的模块句柄 如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError

.参数 lpModuleName, 文本型, , 指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD;

.DLL命令 IsBadCodePtr, 整数型, "kernel32", "IsBadCodePtr", , 确定读指针的合法性

.参数 lpfn, 整数型

.DLL命令 LoadLibrary, 整数型, "kernel32", "LoadLibraryA", , 载入指定的动态链接库,并将它映射到当前进程使用的地址空间。一旦载入,即可访问库内保存的资源 成功则返回库模块的句柄,零表示失败。会设置GetLastError

.参数 lpLibFileName, 文本型, , 指定要载入的动态链接库的名称。采用与CreateProcess函数的lpCommandLine参数指定的同样的搜索顺序;

常量数据表

.版本 2

.常量 ERROR_BUFFER_OVERFLOW, "111", , 111

.常量 ERROR_SUCCESS, "0", , 0L

.常量 MIB_IF_TYPE_ETHERNET, "6", , 以太网接口

.常量 MIB_IF_TYPE_FDDI, "15", , 15

.常量 MIB_IF_TYPE_LOOPBACK, "24", , 24

.常量 MIB_IF_TYPE_OTHER, "1", , 其他类型的网络接口

.常量 MIB_IF_TYPE_PPP, "23", , PPP(点到点协议)网络接口

.常量 MIB_IF_TYPE_SLIP, "28"

.常量 MIB_IF_TYPE_TOKENRING, "9"

.常量 MIB_IF_TYPE_IEEE80211, "71", , IEEE 802.11 wireless network interface

.常量 ERROR_INSUFFICIENT_BUFFER, "122", , 122

获取网卡的IP地址、MAC等信息代码

.版本 2

.程序集 网卡操作程序集

.子程序 彗星取网卡信息, 整数型, 公开, 获取网卡的IP地址、MAC等信息。

.参数 网卡信息数组, NetworkCardInfo, 参考 数组

.局部变量 MapList, NetworkCardMapName, , "0"

.局部变量 AdapterInfo, IP_ADAPTER_INFO

.局部变量 BufBin, 字节集

.局部变量 pAda, 整数型

.局部变量 nSize, 整数型

.局部变量 nBufLen, 整数型

.局部变量 nResult, 整数型

.局部变量 pAddr, 整数型

.局部变量 ipAddr, IP_ADDR_STRING

.局部变量 strTmp, 文本型

.局部变量 strMac, 文本型

.局部变量 Card, NetworkCardInfo

.局部变量 i, 整数型

清除数组 (网卡信息数组)

GetAdapterFriendlyName (MapList)

' //--------------------------------------------------

nResult = GetAdaptersInfo_Ptr (0, nBufLen)

.如果真 (nResult = #ERROR_BUFFER_OVERFLOW)

BufBin = 取空白字节集 (nBufLen)

pAda = GetPtr_Bin (BufBin, BufBin, 0)

nResult = GetAdaptersInfo_Ptr (pAda, nBufLen)

.如果真 (#ERROR_SUCCESS = nResult)

nSize = LocalSize_IP_ADAPTER_INFO (AdapterInfo)

.判断循环首 (pAda ≠ 0)

CopyMemory_P2IP_ADAPTER_INFO (AdapterInfo, pAda, nSize)

Card.strName = 到文本 (AdapterInfo.AdapterName) ' //网卡名称

Card.strDescription = 到文本 (AdapterInfo.Description) ' //网卡描述

Card.nType = AdapterInfo.Type ' //网卡类型

Card.strType = GetAdapterInfoType (AdapterInfo.Type)

' //取出MAC地址

Card.strMac = “”

.计次循环首 (AdapterInfo.AddressLength - 1, i)

.如果真 (i > 1)

Card.strMac = Card.strMac + “-”

.如果真结束

.如果真 (AdapterInfo.Address [i] ≤ 16)

Card.strMac = Card.strMac + “0”

.如果真结束

Card.strMac = Card.strMac + 取十六进制文本 (AdapterInfo.Address [i])

.计次循环尾 ()

' //取出IP地址和子网掩码

ipAddr = AdapterInfo.IpAddressList

.循环判断首 ()

Card.strIP = 到文本 (ipAddr.IpAddress)

Card.strMask = 到文本 (ipAddr.IpMask)

跳出循环 () ' //只取一个

pAddr = ipAddr.Next

.如果真 (pAddr ≠ 0)

CopyMemory_IP_ADDR_STRING (ipAddr, pAddr, LocalSize_IP_ADDR_STRING (ipAddr))

.如果真结束

.循环判断尾 (pAddr ≠ 0)

' //取出

ipAddr = AdapterInfo.GatewayList

.循环判断首 ()

Card.strGateway = 到文本 (ipAddr.IpAddress)

跳出循环 ()

pAddr = ipAddr.Next

.如果真 (pAddr ≠ 0)

CopyMemory_IP_ADDR_STRING (ipAddr, pAddr, LocalSize_IP_ADDR_STRING (ipAddr))

.如果真结束

.循环判断尾 (pAddr ≠ 0)

' //取出DNS服务器

GetDnsServer (AdapterInfo.Index, Card.strDNS1, Card.strDNS2)

' //--------------------------------------------------

.计次循环首 (取数组成员数 (MapList), i)

.如果真 (MapList [i].strGUID = Card.strName)

Card.strFriendName = MapList [i].strFriendName

跳出循环 ()

.如果真结束

.计次循环尾 ()

' //--------------------------------------------------

加入成员 (网卡信息数组, Card)

pAda = AdapterInfo.Next

.判断循环尾 ()

.如果真结束

.如果真结束

' //--------------------------------------------------

返回 (取数组成员数 (网卡信息数组))

.子程序 GetAdapterFriendlyName, , , 通过mprapi库获取连接名称

.参数 MapList, NetworkCardMapName, 数组

.局部变量 hMprConfig

.局部变量 dwBufferSize

.局部变量 BufferBin, 字节集

.局部变量 plfTable, 整数型

.局部变量 FaceInfo, IP_INTERFACE_INFO

.局部变量 Adapter, IP_ADAPTER_INDEX_MAP, , "0"

.局部变量 szMapName, 字节集

.局部变量 szFriendName, 字节集

.局部变量 nSize, 整数型

.局部变量 dwRet

.局部变量 i, 整数型

.局部变量 nPos, 整数型

清除数组 (MapList)

' //-----------------------------------------------------------

dwRet = MprConfigServerConnect (0, hMprConfig) ' //获得句柄

dwRet = GetInterfaceInfo (0, dwBufferSize) ' //获得接口信息表大小

.如果真 (dwRet = #ERROR_INSUFFICIENT_BUFFER)

BufferBin = 取空白字节集 (dwBufferSize)

plfTable = GetPtr_Bin (BufferBin, BufferBin, 0)

dwRet = GetInterfaceInfo (plfTable, dwBufferSize) ' //获得接口信息

nSize = LocalSize_IP_INTERFACE_INFO (FaceInfo)

CopyMemory_P2IP_INTERFACE_INFO (FaceInfo, plfTable, nSize)

.如果真 (FaceInfo.NumAdapters > 0)

重定义数组 (Adapter, 假, FaceInfo.NumAdapters)

nSize = FaceInfo.NumAdapters × LocalSize_IP_ADAPTER_INDEX_MAP (Adapter [1])

.如果真 (nSize > dwBufferSize)

nSize = dwBufferSize

.如果真结束

CopyMemory_P2IP_ADAPTER_INDEX_MAP_Array (Adapter, plfTable + 4, nSize)

重定义数组 (MapList, 假, FaceInfo.NumAdapters)

.计次循环首 (FaceInfo.NumAdapters, i)

szMapName = 到字节集 (Adapter [i].Name)

szFriendName = 取空白字节集 (256)

MprConfigGetFriendlyName (hMprConfig, szMapName, szFriendName, 255)

MapList [i].Index = Adapter [i].Index

MapList [i].strMapName = W2A (szMapName)

MapList [i].strFriendName = W2A (szFriendName)

MapList [i].strGUID = MapList [i].strMapName

nPos = 寻找文本 (MapList [i].strGUID, “{”, , 假)

.如果真 (nPos ≠ -1)

MapList [i].strGUID = 取文本右边 (MapList [i].strGUID, 取文本长度 (MapList [i].strGUID) - nPos + 1)

.如果真结束

.计次循环尾 ()

.如果真结束

.如果真结束

.子程序 GetDnsServer, 逻辑型, , 通过GetPerAdapterInfo获取指定网卡的DNS服务器

.参数 nIndex, 整数型, , IP_ADAPTER_INFO.Index

.参数 strDNS1, 文本型, 参考, 首选DNS服务器

.参数 strDNS2, 文本型, 参考, 备用DNS服务器

.局部变量 PerAdapterInfo, IP_PER_ADAPTER_INFO

.局部变量 BufBin, 字节集

.局部变量 pAda, 整数型

.局部变量 nSize, 整数型

.局部变量 nBufLen, 整数型

.局部变量 nResult, 整数型

.局部变量 pAddr, 整数型

.局部变量 ipAddr, IP_ADDR_STRING

.局部变量 nCount, 整数型

strDNS1 = “”

strDNS2 = “”

' //--------------------------------------------------

nResult = GetPerAdapterInfo_Ptr (nIndex, 0, nBufLen)

.如果真 (nResult = #ERROR_BUFFER_OVERFLOW)

BufBin = 取空白字节集 (nBufLen)

pAda = GetPtr_Bin (BufBin, BufBin, 0)

nResult = GetPerAdapterInfo_Ptr (nIndex, pAda, nBufLen)

.如果真 (#ERROR_SUCCESS = nResult)

nSize = LocalSize_IP_PER_ADAPTER_INFO (PerAdapterInfo)

CopyMemory_P2IP_PER_ADAPTER_INFO (PerAdapterInfo, pAda, nSize)

ipAddr = PerAdapterInfo.DnsServerList

.循环判断首 ()

nCount = nCount + 1

.判断开始 (nCount = 1)

strDNS1 = 到文本 (ipAddr.IpAddress)

.判断 (nCount = 2)

strDNS2 = 到文本 (ipAddr.IpAddress)

.默认

.判断结束

pAddr = ipAddr.Next

.如果真 (pAddr ≠ 0)

CopyMemory_IP_ADDR_STRING (ipAddr, pAddr, LocalSize_IP_ADDR_STRING (ipAddr))

.如果真结束

.循环判断尾 (pAddr ≠ 0)

返回 (真)

.如果真结束

.如果真结束

' //--------------------------------------------------

返回 (假)

.子程序 GetAdapterInfoType, 文本型

.参数 nType, 整数型

.判断开始 (nType = #MIB_IF_TYPE_OTHER)

返回 (“OTHER”)

.判断 (nType = #MIB_IF_TYPE_ETHERNET)

返回 (“ETHERNET”)

.判断 (nType = #MIB_IF_TYPE_TOKENRING)

返回 (“TOKENRING”)

.判断 (nType = #MIB_IF_TYPE_FDDI)

返回 (“FDDI”)

.判断 (nType = #MIB_IF_TYPE_PPP)

返回 (“PPP”)

.判断 (nType = #MIB_IF_TYPE_LOOPBACK)

返回 (“LOOPBACK”)

.判断 (nType = #MIB_IF_TYPE_SLIP)

返回 (“SLIP”)

.判断 (nType = #MIB_IF_TYPE_IEEE80211)

返回 (“IEEE80211”)

.默认

返回 (到文本 (nType))

.判断结束

初始化模块的代码

.版本 2

.程序集 程序集1

.子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码

载入 (窗口1, , 假)

返回 (0)

.子程序 A2W, 字节集

.参数 MultiByteStr, 文本型, 参考

.局部变量 len, 整数型

.局部变量 Returned, 字节集

len = MultiByteToWideChar (0, 0, MultiByteStr, -1, { }, 0)

Returned = 取空白字节集 ((len + 1) × 2)

MultiByteToWideChar (0, 0, MultiByteStr, -1, Returned, 取字节集长度 (Returned))

返回 (Returned)

.子程序 W2A, 文本型

.参数 CharStr, 字节集

.局部变量 len, 整数型

.局部变量 Returned, 文本型

len = WideCharToMultiByte (1, 0, CharStr, -1, 字符 (0), 0, 字符 (0), 假)

Returned = 取空白文本 (len)

WideCharToMultiByte (1, 0, CharStr, -1, Returned, 取文本长度 (Returned), 字符 (0), 假)

返回 (Returned)

取网卡信息的代码

.版本 2

.支持库 iext

.程序集 窗口程序集_窗口1

.子程序 _窗口1_创建完毕

.局部变量 网卡信息数组, NetworkCardInfo, , "0"

.局部变量 网卡数量, 整数型

.局部变量 网卡名称, 文本型

.局部变量 i, 整数型

.局部变量 x, 整数型

树型框1.清空 ()

网卡数量 = 彗星取网卡信息 (网卡信息数组)

.计次循环首 (取数组成员数 (网卡信息数组), i)

网卡名称 = “网卡” + 到文本 (i) + “ ” + 网卡信息数组 [i].strFriendName

x = 树型框1.加入项目 (-1, 网卡名称, 0, 0, , , )

树型框1.加入项目 (x, “连接名称:” + 网卡信息数组 [i].strFriendName, , , , , )

树型框1.加入项目 (x, “网卡名称:” + 网卡信息数组 [i].strName, , , , , )

树型框1.加入项目 (x, “网卡描述:” + 网卡信息数组 [i].strDescription, , , , , )

树型框1.加入项目 (x, “网卡类型:” + 网卡信息数组 [i].strType, , , , , )

树型框1.加入项目 (x, “MAC地址:” + 网卡信息数组 [i].strMac, , , , , )

树型框1.加入项目 (x, “IP地址:” + 网卡信息数组 [i].strIP, , , , , )

树型框1.加入项目 (x, “子网掩码:” + 网卡信息数组 [i].strMask, , , , , )

树型框1.加入项目 (x, “网关地址:” + 网卡信息数组 [i].strGateway, , , , , )

树型框1.加入项目 (x, “首选DNS:” + 网卡信息数组 [i].strDNS1, , , , , )

树型框1.加入项目 (x, “备用DNS:” + 网卡信息数组 [i].strDNS2, , , , , )

树型框1.扩展 (x)

.计次循环尾 ()

运行结果:

总结

以上是 易语言调用api枚举网卡名称并且获取信息的代码 的全部内容, 来源链接: utcz.com/z/312915.html

回到顶部