<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Think Again &#187; 网卡地址</title>
	<atom:link href="http://www.thinkagain.cn/archives/tag/%e7%bd%91%e5%8d%a1%e5%9c%b0%e5%9d%80/feed" rel="self" type="application/rss+xml" />
	<link>http://www.thinkagain.cn</link>
	<description>Inspire thinking, inspire creativity, inspire future.</description>
	<lastBuildDate>Wed, 01 Feb 2012 07:31:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>在VB中如何得到网络中某一台电脑(电脑名)的网卡地址？</title>
		<link>http://www.thinkagain.cn/archives/14.html</link>
		<comments>http://www.thinkagain.cn/archives/14.html#comments</comments>
		<pubDate>Mon, 04 Apr 2005 04:25:59 +0000</pubDate>
		<dc:creator>山之岚</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[网卡地址]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false">http://lovepc.i-lady.cn/archives/14</guid>
		<description><![CDATA[在VB中如何得到网络中某一台电脑(电脑名)的网卡地址... ]]></description>
			<content:encoded><![CDATA[<p>[程序语言] Microsoft Visual Basic 4.0,5.0,6.0<br />
[运行平台] WINDOWS<br />
[功能描述]  IPX和NETBIOS接口需要网络地址。该文通过详细的步骤演示了如何通过VB获取网卡地址。</p>
<p>步骤：</p>
<p>1)在Visual  Basic生成标准的EXE文件。缺省创建 Form1。<br />
2)在Form1中添加一命令按钮，缺省名为Command1。<br />
3)把下列代码放到Form1中说明部分。</p>
<p>Option Explicit<br />
Private Const NCBASTAT =  &amp;H33<br />
Private Const NCBNAMSZ = 16<br />
Private Const HEAP_ZERO_MEMORY =  &amp;H8<br />
Private Const HEAP_GENERATE_EXCEPTIONS = &amp;H4<br />
Private Const  NCBRESET = &amp;H32</p>
<p>Private Type NCB<br />
ncb_command As Byte &#8216;Integer<br />
ncb_retcode As Byte &#8216;Integer<br />
ncb_lsn As Byte &#8216;Integer<br />
ncb_num  As Byte &#8216; Integer<br />
ncb_buffer As Long &#8216;String<br />
ncb_length As Integer<br />
ncb_callname As String * NCBNAMSZ<br />
ncb_name As String * NCBNAMSZ<br />
ncb_rto As Byte &#8216;Integer<br />
ncb_sto As Byte &#8216; Integer<br />
ncb_post As  Long<br />
ncb_lana_num As Byte &#8216;Integer<br />
ncb_cmd_cplt As Byte &#8216;Integer<br />
ncb_reserve(9) As Byte &#8216; Reserved, must be 0<br />
ncb_event As Long<br />
End Type</p>
<p>Private Type ADAPTER_STATUS<br />
adapter_address(5) As  Byte &#8216;As String * 6<br />
rev_major As Byte &#8216;Integer<br />
reserved0 As Byte  &#8216;Integer<br />
adapter_type As Byte &#8216;Integer<br />
rev_minor As Byte &#8216;Integer<br />
duration As Integer<br />
frmr_recv As Integer<br />
frmr_xmit As Integer<br />
iframe_recv_err As Integer<br />
xmit_aborts As Integer<br />
xmit_success  As Long<br />
recv_success As Long<br />
iframe_xmit_err As Integer<br />
recv_buff_unavail As Integer<br />
t1_timeouts As Integer<br />
ti_timeouts As Integer<br />
Reserved1 As Long<br />
free_ncbs As Integer<br />
max_cfg_ncbs As Integer<br />
max_ncbs As Integer<br />
xmit_buf_unavail  As Integer<br />
max_dgram_size As Integer<br />
pending_sess As Integer<br />
max_cfg_sess As Integer<br />
max_sess As Integer<br />
max_sess_pkt_size  As Integer<br />
name_count As Integer<br />
End Type</p>
<p>Private Type  NAME_BUFFER<br />
name As String * NCBNAMSZ<br />
name_num As Integer<br />
name_flags As Integer<br />
End Type</p>
<p>Private Type ASTAT<br />
adapt  As ADAPTER_STATUS<br />
NameBuff(30) As NAME_BUFFER<br />
End Type</p>
<p>Private  Declare Function Netbios Lib &#8220;netapi32.dll&#8221; (pncb As NCB) As Byte<br />
Private  Declare Sub CopyMemory Lib &#8220;kernel32&#8243; Alias &#8220;RtlMoveMemory&#8221; _<br />
(hpvDest As  Any, ByVal hpvSource As Long, ByVal cbCopy As Long)<br />
Private Declare Function  GetProcessHeap Lib &#8220;kernel32&#8243; () As Long<br />
Private Declare Function HeapAlloc  Lib &#8220;kernel32&#8243; _<br />
(ByVal hHeap As Long, ByVal dwFlags As Long, _<br />
ByVal dwBytes As Long) As Long<br />
Private Declare Function HeapFree Lib  &#8220;kernel32&#8243; (ByVal hHeap As Long, _<br />
ByVal dwFlags As Long, lpMem As Any) As  Long</p>
<p>把下面的代码放入Command1_Click的事件中：</p>
<p>Private Sub Command1_Click()<br />
Dim myNcb As NCB<br />
Dim bRet As Byte<br />
myNcb.ncb_command = NCBRESET<br />
bRet = Netbios(myNcb)<br />
myNcb.ncb_command = NCBASTAT<br />
myNcb.ncb_lana_num = 0<br />
myNcb.ncb_callname = &#8220;*　　　　　　 &#8221;<br />
Dim  myASTAT As ASTAT, tempASTAT As ASTAT<br />
Dim pASTAT As Long<br />
myNcb.ncb_length = Len(myASTAT)<br />
Debug.Print Err.LastDllError<br />
pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS _<br />
Or  HEAP_ZERO_MEMORY, myNcb.ncb_length)<br />
If pASTAT = 0 Then<br />
Debug.Print  &#8220;memory allcoation failed!&#8221;<br />
Exit Sub<br />
End If<br />
myNcb.ncb_buffer  = pASTAT<br />
bRet = Netbios(myNcb)<br />
Debug.Print Err.LastDllError<br />
CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)<br />
MsgBox  Hex(myASTAT.adapt.adapter_address(0)) &amp; &#8221; &#8221; &amp; _<br />
Hex(myASTAT.adapt.adapter_address(1)) _<br />
&amp; &#8221; &#8221; &amp;  Hex(myASTAT.adapt.adapter_address(2)) &amp; &#8221; &#8221; _<br />
&amp;  Hex(myASTAT.adapt.adapter_address(3)) _<br />
&amp; &#8221; &#8221; &amp;  Hex(myASTAT.adapt.adapter_address(4)) &amp; &#8221; &#8221; _<br />
&amp;  Hex(myASTAT.adapt.adapter_address(5))<br />
HeapFree GetProcessHeap(), 0, pASTAT<br />
End Sub</p>
<p>4)按F5，运行该程序。<br />
5)点击Command1。注意，网卡地址将在一信息框中显示出来。<br />
[tag]网卡地址, vb[/tags]</p>
<hr/><p style="font-size:1.5em;font-weight:bold;">推荐阅读</p><p><i>2007.09.02.11:16.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/679.html" title="刚才在运行一个自己几年前用VB写的类似小闹钟的时间提示软件时，弹出提">Comdlg32.ocx控件下载 (1)</a></p><p><i>2007.01.20.7:53.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/77.html" title="什么是XML

扩展标记语言XML是一种简单的数据存储语言，使用一系列简单">利用VB操作XML数据 (0)</a></p><p><i>2006.02.23.12:09.am</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/44.html" title="摘自Pconline.com.cn，原文链接：http://www.pconline.com.cn/pcedu/empolder/gj/vb/0506/644702.">VB：VB实用函数集 (0)</a></p><p><i>2006.02.18.11:59.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/42.html" title="以前都是用textbox的KeyPress事件来控制字符输入，今天用看程序的时候，无意">VB:采用Validate事件控制textbox只能输入数字 (0)</a></p><p><i>2006.01.15.6:57.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/39.html" title="今天在用VB编矩阵计算的时候。编写了个子程序，不过调用的时候老是出现B">VB:关于ByRef参数类型不符 (0)</a></p><p><i>2006.01.13.9:55.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/37.html" title="前几天帮研究室内的先辈编了一个VB程序。先辈的研究课题有一个工作台、">VB:一个2维数组的组合排列 (0)</a></p><p><i>2005.10.06.6:52.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/9.html" title="一、在VB中声明API函数有两种方法：如果我们只在某个窗体中使用API函数，">怎样在VB中声明和使用API函数 (0)</a></p><p><i>2005.10.01.11:15.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/10.html" title="   今天刚做一个程序，里面有用到某点颜色的RGB值，又懒得去下载现成的">利用API提取屏幕任意点颜色 (0)</a></p><hr/><p>Copyright &copy; 2012&nbsp;|&nbsp;<a href="http://www.thinkagain.cn">Think Again</a>&nbsp;|&nbsp;<a href="http://www.thinkagain.cn/archives/14.html">原文链接</a></p><img src="http://img.tongji.cn.yahoo.com/710673/ystat.gif"/>]]></content:encoded>
			<wfw:commentRss>http://www.thinkagain.cn/archives/14.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

