个人珍藏空间,分享快乐,分享精彩

如何从 VisualBasic 调用 GetNetworkParams / GetAdaptersInfo

上一篇 / 下一篇  2008-04-30 13:30:23 / 个人分类:Visual Basic

概要

loadTOCNode(1, 'summary');本文阐释如何以编程方式检索类似 IPCONFIG.EXE 工具 IP 配置信息。 它说明如何使用 IP 助手 API GetNetworkParams() 和 GetAdaptersInfo() 从 VisualBasic。
K ^ M3b[0
muM*`Y6eH0库由本文中代码示例调用仅支持以下平台上:
Microsoft Windows 2000 钱塘个人空间2bGs e3D ]e
Microsoft Windows 98
ed,KW!v9FItS0Microsoft Windows Millennium Edition (Me)
任何其他平台导致错误上运行它。

更多信息

loadTOCNode(1, 'moreinformation');
1. 启动新 VisualBasic 标准 EXE 项目。 默认情况下创建 Form. 1。
2. 在 项目 菜单上, 单击 Form. 1 删除 。
3. 在 项目 菜单, 单击 添加模块 。 默认情况下将创建 Module 1。
4. 在 Module 1 的 GeneralDeclarations 部分粘贴如下代码:

Public Const MAX_HOSTNAME_LEN = 132
!V5_7sFes;t1m^0Public Const MAX_DOMAIN_NAME_LEN = 132钱塘个人空间DEc,Kk}jR\
Public Const MAX_SCOPE_ID_LEN = 260钱塘个人空间%c7WkRi2d
Public Const MAX_ADAPTER_NAME_LENGTH = 260
+Rj`8n$Z fF0Public Const MAX_ADAPTER_ADDRESS_LENGTH = 8钱塘个人空间[lGO(Bq)^5T P
Public Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132
'b[k(yHPG0Public Const ERROR_BUFFER_OVERFLOW = 111钱塘个人空间c-N? XjG$I6O
Public Const MIB_IF_TYPE_ETHERNET = 6钱塘个人空间!g K-{/l,Q
Public Const MIB_IF_TYPE_TOKENRING = 9
(T^?8t2}.J0Public Const MIB_IF_TYPE_FDDI = 15钱塘个人空间k+O;ofw1f
Public Const MIB_IF_TYPE_PPP = 23
4^ w4q^7?0Public Const MIB_IF_TYPE_LOOPBACK = 24钱塘个人空间4AyM p+WCwj.sJ
Public Const MIB_IF_TYPE_SLIP = 28钱塘个人空间_;? c8xe Jf6}2~

&WKg+W$\.?3vxAm0Type IP_ADDR_STRING
Cr#y*wh WxE0            Next As Long钱塘个人空间O4vj!e"E
            IpAddress As String * 16钱塘个人空间}+SW]T(c.L0u_ZQ
            IpMask As String * 16
L N I"}'`0            Context As Long钱塘个人空间-\-[b9B I p](D I4P!V?
End Type
u/a n6][*W/SpI`0钱塘个人空间#j0KZ"S&`,R;l \L
Type IP_ADAPTER_INFO钱塘个人空间2k0roin`ww
            Next As Long钱塘个人空间9G{(q#{mK
            ComboIndex As Long
%c6Q0K+s*ix0            AdapterName As String * MAX_ADAPTER_NAME_LENGTH
Nj,gw9A||.U0            Description As String * MAX_ADAPTER_DESCRIPTION_LENGTH钱塘个人空间8J9vx'z^Fpa
            AddressLength As Long钱塘个人空间3H ZS%Iv.s)D @ `N,v
            Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte
1|/V|:qsQ0            Index As Long钱塘个人空间yHDu7O{"Xb3F5y'P
            Type As Long钱塘个人空间"wy0D&J5zPx
            DhcpEnabled As Long钱塘个人空间"wMN$HP
            CurrentIpAddress As Long
3ZE(c$uu2j0            IpAddressList As IP_ADDR_STRING
kjIZ;S/y.W&a0            GatewayList As IP_ADDR_STRING钱塘个人空间`xv;N%G"k
            DhcpServer As IP_ADDR_STRING
/kww1f%[T eO0            HaveWins As Byte
%} _6m%r\4C0?0            PrimaryWinsServer As IP_ADDR_STRING
`w+s.i"V [F4s1Dpn0            SecondaryWinsServer As IP_ADDR_STRING
D wfw@q#DO0            LeaseObtained As Long钱塘个人空间$|L0j f5E
            LeaseExpires As Long
"h*yM5{"n9])II3vCT0End Type
[6Inlo0
\AK0N t0Type FIXED_INFO钱塘个人空间:k.sW.XFY.R'h
            HostName As String * MAX_HOSTNAME_LEN
~,^ FVT[ w%S0            DomainName As String * MAX_DOMAIN_NAME_LEN钱塘个人空间Rccw]
            CurrentDnsServer As Long
i#M1~{5WQ0            DnsServerList As IP_ADDR_STRING钱塘个人空间D7I;V{-S(~ cq3D2@
            NodeType As Long钱塘个人空间av1HG(hk1sgY
            ScopeId  As String * MAX_SCOPE_ID_LEN
U-k)E2op-F&u0            EnableRouting As Long钱塘个人空间4c3njo?l*W
            EnableProxy As Long钱塘个人空间 ]MC*_$J2]hD
            EnableDns As Long钱塘个人空间/I&xUU.a&Z0yv
End Type
'j4F`$vG(M0
#]f`T$t!Z0Public Declare Function GetNetworkParams Lib "IPHlpApi.dll" _钱塘个人空间Db hm0z0Eo
       (FixedInfo As Any, pOutBufLen As Long) As Long钱塘个人空间&V#yn'R}-x)b@$J
Public Declare Function GetAdaptersInfo Lib "IPHlpApi.dll" _
4~"ap n+i0       (IpAdapterInfo As Any, pOutBufLen As Long) As Long
3f)_a/H8TOM_g0Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _钱塘个人空间.Xz:VL E@:T$A
       (Destination As Any, Source As Any, ByVal Length As Long)钱塘个人空间$j\'s P8z
钱塘个人空间{d jfVz
Sub main()钱塘个人空间eKu;@:T2Axc
    Dim error As Long
;SE)X v5y0    Dim FixedInfoSize As Long
v3y!Jq \ b w5Q0    Dim AdapterInfoSize As Long
FQv$I H/uY't0    Dim i As Integer
,\M_g-Z@W U |M0    Dim PhysicalAddress  As String钱塘个人空间5Z-y*z4c2f Xf~
    Dim NewTime As Date钱塘个人空间m%i+H\Ak
    Dim AdapterInfo As IP_ADAPTER_INFO钱塘个人空间GI3m W!B1C
    Dim AddrStr As IP_ADDR_STRING
'q&xaQ8?0N%_ hv0    Dim FixedInfo As FIXED_INFO钱塘个人空间S%DV$h8_)x"Bx
    Dim Buffer As IP_ADDR_STRING
A P5l,B8R)Y0    Dim pAddrStr As Long
0@}&aG BS0    Dim pAdapt As Long
uuE:Q'Bb l*zP-d!a)z0    Dim Buffer2 As IP_ADAPTER_INFO钱塘个人空间EHKS)D:S
    Dim FixedInfoBuffer() As Byte
t#@R~I3~\;P9H(~0    Dim AdapterInfoBuffer() As Byte
Tv#ER.Z)wY5p#P0    钱塘个人空间 \2s!j(i]V2HlZ
    ' Get the main IP configuration information for this machine钱塘个人空间f t6z(r3]"zIk
    ' using a FIXED_INFO structure.钱塘个人空间9tDmg.l
    FixedInfoSize = 0钱塘个人空间m+Gi F};JI
    error = GetNetworkParams(ByVal 0&, FixedInfoSize)钱塘个人空间7W0xp]oZq4X'i
    If error <> 0 Then钱塘个人空间@"f(g,NMgu
        If error <> ERROR_BUFFER_OVERFLOW Then钱塘个人空间.]3WNtE:]W
           MsgBox "GetNetworkParams sizing failed with error " & error
{jg)f ?I-~0           Exit Sub
P.u/n;EM0        End If
]l'L&\+e;H@4XTeP0    End If
&Z.k:D2h"Gh;Z%L(`[0    ReDim FixedInfoBuffer(FixedInfoSize - 1)
r;fO3rTw4O#TT0    钱塘个人空间J HLS9Wu$QR C
    error = GetNetworkParams(FixedInfoBuffer(0), FixedInfoSize)钱塘个人空间%_ w+u:CpB U@
    If error = 0 Then
1zE4c#Z.Q/]/{R0            CopyMemory FixedInfo, FixedInfoBuffer(0), FixedInfoSize
Lrx[k'?o?0            MsgBox "Host Name:  " & FixedInfo.HostName钱塘个人空间B(h$D`~\ j
            MsgBox "DNS Servers:  " & FixedInfo.DnsServerList.IpAddress钱塘个人空间 r%E&ohX
            pAddrStr = FixedInfo.DnsServerList.Next钱塘个人空间*gL.Yy%a?8V
            Do While pAddrStr <> 0钱塘个人空间l!gD"zg$V1t+P1f4V9I
                  CopyMemory Buffer, ByVal pAddrStr, LenB(Buffer)
%zln)} c8R0                  MsgBox "DNS Servers:  " & Buffer.IpAddress
f.L |D$d0                  pAddrStr = Buffer.Next
V-czo!W;@4@_/^:X0            Loop
&T$c2u$K+L\0            钱塘个人空间5CD7t\V(A2KN
            Select Case FixedInfo.NodeType钱塘个人空间-ii:cSb@
                       Case 1
.@i#x$l{Z!S6X1O0                                  MsgBox "Node type: Broadcast"钱塘个人空间5wO&G Qr8AP0Q8e
                       Case 2钱塘个人空间fg8h v ]3W!`4r
                                  MsgBox "Node type: Peer to peer"
HuXbX&e1D0                       Case 4钱塘个人空间r*{u&s:IGl1qy
                                  MsgBox "Node type: Mixed"钱塘个人空间 h#O\/i U;?] d
                       Case 8
&g5E+AQ7qs6Rr!\k0                                  MsgBox "Node type: Hybrid"
U,ylHd0                       Case Else
w P;JZ lE|0                                  MsgBox "Unknown node type"钱塘个人空间 J]3d _c!~%@!N
            End Select
;}6P5`6yveU[0           
5p3zi-ih/r `4k ~0            MsgBox "NetBIOS Scope ID:  " & FixedInfo.ScopeId钱塘个人空间Nd4h5H0a$K$VaYK+eF
            If FixedInfo.EnableRouting Then钱塘个人空间I#s*D)v? J fc?
                       MsgBox "IP Routing Enabled "钱塘个人空间&Y Qz TF#s,Uh
            Else钱塘个人空间$f Ho2V1@U OFY
                       MsgBox "IP Routing not enabled"钱塘个人空间F+Y9Q/[n#J+I3F
            End If
&E5`]O'V+`u}d0            If FixedInfo.EnableProxy Then钱塘个人空间Djp$q,{%Z*vf(`
                       MsgBox "WINS Proxy Enabled "
"mE8xaIw5~F0            Else钱塘个人空间'a\%V3\$S5A&P7q,EFN
                       MsgBox "WINS Proxy not Enabled "
-c0h} ls~0            End If
)W_ ZUG-xtc0            If FixedInfo.EnableDns Then钱塘个人空间4?1j8Of-}[+yb-`H
                      MsgBox "NetBIOS Resolution Uses DNS "钱塘个人空间5pCh AL:lb)[+B
            Else
3HK |7L._*WyD A0                      MsgBox "NetBIOS Resolution Does not use DNS  "钱塘个人空间 W:Zq"`#w x~ C
            End If
h*Y.D ga z,N5|-f0    Else
#Q)\5Lhv1cqqz5r0            MsgBox "GetNetworkParams failed with error " & error钱塘个人空间cV7|t#S$h,J&o
            Exit Sub钱塘个人空间fA#mb`a.LW
    End If
1HQ)X;E\2u$}0    钱塘个人空间!BcJ`y#a
    ' Enumerate all of the adapter specific information using the钱塘个人空间 z]IO(Ql#u6R
    ' IP_ADAPTER_INFO structure.钱塘个人空间2@+VeTQ,|0@T~
    ' Note:  IP_ADAPTER_INFO contains a linked list of adapter entries.
F%I1Gv"^~9E8Ru \0    钱塘个人空间P_2?3Jn ]J"gV
    AdapterInfoSize = 0钱塘个人空间mDWCCn%Ym4K]
    error = GetAdaptersInfo(ByVal 0&, AdapterInfoSize)
8]CS!L3I/\{0    If error <> 0 Then钱塘个人空间;R\ [ [`X8v`3J
        If error <> ERROR_BUFFER_OVERFLOW Then
G^$T/c2a7Pe0           MsgBox "GetAdaptersInfo sizing failed with error " & error钱塘个人空间6L&PBp#Z(Dlj
           Exit Sub钱塘个人空间s2Uc!} R0I
        End If钱塘个人空间O$nIS1~3s/D M
    End If钱塘个人空间1v| Bsfr
    ReDim AdapterInfoBuffer(AdapterInfoSize - 1)钱塘个人空间!GX NOB9{.e L
钱塘个人空间Jj;ME"?Pg GF
    ' Get actual adapter information钱塘个人空间1XG?1iEn
    error = GetAdaptersInfo(AdapterInfoBuffer(0), AdapterInfoSize)
M H e:Q|Okv6y0    If error <> 0 Then钱塘个人空间f0j$A wk)Z
       MsgBox "GetAdaptersInfo failed with error " & error
+gs7I eg5e'iQ0       Exit Sub钱塘个人空间 _e dz'P:r$u1]
    End If
@8SeB\+Cbr2A.k;S0   钱塘个人空间i9w2P3G(L
    ' Allocate memory
W7G3z lx[BG0     CopyMemory AdapterInfo, AdapterInfoBuffer(0), AdapterInfoSize钱塘个人空间O1q$y(^6e!C
    pAdapt = AdapterInfo.Next钱塘个人空间i*yw/v6x:U&`H
钱塘个人空间k!`.wQ)x P8W,p
    Do钱塘个人空间-X Iq,CY!`
     CopyMemory Buffer2, AdapterInfo, AdapterInfoSize钱塘个人空间)y`z4P&lS
       Select Case Buffer2.Type钱塘个人空间rR%y {Y]a,gf
              Case MIB_IF_TYPE_ETHERNET
i0]s8n*bX7q&h{3W J1\0                   MsgBox "Adapter name: Ethernet adapter "
#eQaG2C]y*E0              Case MIB_IF_TYPE_TOKENRING钱塘个人空间} t"pi@?4po
                   MsgBox "Adapter name: Token Ring adapter "
0M l(av:YW]0              Case MIB_IF_TYPE_FDDI钱塘个人空间`-d? h1|AVp&o
                   MsgBox "Adapter name: FDDI adapter "钱塘个人空间 m9K2f9V0i5Ch%T'tB)z
              Case MIB_IF_TYPE_PPP钱塘个人空间.A;{nv:e)K\{
                   MsgBox "Adapter name: PPP adapter"
6Y"L jV9QY t9p5O0              Case MIB_IF_TYPE_LOOPBACK
6f6h*Bvc h9_0                   MsgBox "Adapter name: Loopback adapter "
-wp9f~0Go3u(a)E!S.u0              Case MIB_IF_TYPE_SLIP
'cK$Dn1Y8R"X,|0                   MsgBox "Adapter name: Slip adapter "
)r(CX5ym-i6?0              Case Else钱塘个人空间+Cj{C&XdVnmuF
                   MsgBox "Adapter name: Other adapter "
N _Q|`km0       End Select
F uQn7_K%P:Z0       MsgBox "AdapterDescription: " & Buffer2.Description
8S$N%Q'm _a0
.e}7T^9s gGqu0       PhysicalAddress = ""
bP8N u._;x3f0       For i = 0 To Buffer2.AddressLength - 1钱塘个人空间.V.~'q-oU
           PhysicalAddress = PhysicalAddress & Hex(Buffer2.Address(i))
5ZV@2Ks5h!Jm0           If i < Buffer2.AddressLength - 1 Then钱塘个人空间c Q7|Z)z5P1q
              PhysicalAddress = PhysicalAddress & "-"钱塘个人空间1[f:p*Pw7sI| l
           End If钱塘个人空间"RkeD}5h{
       Next
S([1AKm o0       MsgBox "Physical Address: " & PhysicalAddress钱塘个人空间^5Iu+St[2M
    钱塘个人空间M,GLM6D#\,v7eKH `
       If Buffer2.DhcpEnabled Then钱塘个人空间2c"oVN+e"T[Q%A
          MsgBox "DHCP Enabled "钱塘个人空间$h[J3l$ef
       Else钱塘个人空间O `z p9ybOV\0]9q
          MsgBox "DHCP disabled"
*`.h1qq8kPP0       End If
kEB'X6V6x#t0
e,a0D {8pW7wfP0       MsgBox "IP Address: " & Buffer2.IpAddressList.IpAddress钱塘个人空间z g'\4b4chb"ST0|
       MsgBox "Subnet Mask: " & Buffer2.IpAddressList.IpMask钱塘个人空间 Lt7~3C/J-G
       pAddrStr = Buffer2.IpAddressList.Next钱塘个人空间h.`X8P(aQM,S
       Do While pAddrStr <> 0
[b(q rU|(WB~0          CopyMemory Buffer, Buffer2.IpAddressList, LenB(Buffer)
J(qlGl"oLHg0          MsgBox "IP Address: " & Buffer.IpAddress钱塘个人空间,\}iY5L3C} a!XY
          MsgBox "Subnet Mask: " & Buffer.IpMask钱塘个人空间u&Xa*E^
          pAddrStr = Buffer.Next钱塘个人空间Rw a0\Y-s)o3Y
          If pAddrStr <> 0 Then钱塘个人空间{ [/O'c_`'\
             CopyMemory Buffer2.IpAddressList, ByVal pAddrStr, _钱塘个人空间%U6q&V@5g)k
                        LenB(Buffer2.IpAddressList)
d aI1K5T#~-lP&u0          End If钱塘个人空间-x#u H*D*H7^)y;k*]
       Loop钱塘个人空间*f&oi.?&j!MU Kw
   
KAc$vD v0       MsgBox "Default Gateway: " & Buffer2.GatewayList.IpAddress钱塘个人空间9w.jr%CfUR
       pAddrStr = Buffer2.GatewayList.Next钱塘个人空间 }(K+_5L W V)T
       Do While pAddrStr <> 0钱塘个人空间4z4?$D6`NA.e
          CopyMemory Buffer, Buffer2.GatewayList, LenB(Buffer)
of/[~aWA0          MsgBox "IP Address: " & Buffer.IpAddress钱塘个人空间a-F;`yHl;`}
          pAddrStr = Buffer.Next钱塘个人空间 H+IrZQ/t%mV
          If pAddrStr <> 0 Then钱塘个人空间$w+cd3Jn U1F
             CopyMemory Buffer2.GatewayList, ByVal pAddrStr, _钱塘个人空间 W-vW(z(o5B*{xg
                        LenB(Buffer2.GatewayList)
o,[3G4jv0          End If钱塘个人空间 H"G'i2~o(T Pxg1N
       Loop
U-i]"BhuV)T%Q0钱塘个人空间8Z^K|j[E)w`
       MsgBox "DHCP Server: " & Buffer2.DhcpServer.IpAddress
}/@H \"aL&cM0       MsgBox "Primary WINS Server: " & _钱塘个人空间ySr X+lK3q
              Buffer2.PrimaryWinsServer.IpAddress
pwP3aJ#I0h5E0       MsgBox "Secondary WINS Server: " & _钱塘个人空间Ryb(PYE
              Buffer2.SecondaryWinsServer.IpAddress钱塘个人空间$o{J8D a }+yQ
钱塘个人空间,YUg0O@~WY4~SX:p
       ' Display time.钱塘个人空间!T7il*@pQ-NPa
       NewTime = DateAdd("s", Buffer2.LeaseObtained, #1/1/1970#)钱塘个人空间j-H4o4f8GJ
       MsgBox "Lease Obtained: " & _
-h'O/B [-~%Hd;l1z2~a0              CStr(Format(NewTime, "dddd, mmm d hh:mm:ss yyyy"))钱塘个人空间$zr I`nJ/ufN2o
    
m/mG1E7n$Z+|0kZ c.k0       NewTime = DateAdd("s", Buffer2.LeaseExpires, #1/1/1970#)钱塘个人空间 HyYmj0[(~
       MsgBox "Lease Expires :  " & _钱塘个人空间)N }.J[*?"e2F
              CStr(Format(NewTime, "dddd, mmm d hh:mm:ss yyyy"))钱塘个人空间Z(Up&u lQ*G
       pAdapt = Buffer2.Next钱塘个人空间-VI;xE m S&\W0H+Z]
       If pAdapt <> 0 Then
grB(jK b)e.[ s0           CopyMemory AdapterInfo, ByVal pAdapt, AdapterInfoSize钱塘个人空间0x*{/@K@x w1v7~!W6J
        End If钱塘个人空间:[c0xjk~~
      Loop Until pAdapt = 0
NuP`dK0End Sub

末尾运行此示例如编译, EXE 提供以下错误信息:

Runtime 错误 10: 此数组是固定和临时锁定。

末尾 IDE 中运行此生成 IPF VB6.EXE 上。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

用户菜单

我的栏目

日历

« 2009-01-10  
    123
45678910
11121314151617
18192021222324
25262728293031

我的存档

数据统计

RSS订阅

Open Toolbar