用delphi如何像vc中的函數sendarp()一樣,輸入ip就可以返回mac地址呢.謝謝!
解决方案 »
- 请问在XP的sp2电脑上Dcom Connection 连接中间件的,但就是连不上,提示为拒绝访问,这是为何呀?
- 请问有哪个控件可以像QQ那样,在listbox的item前面加图片吗?
- MDI创建子窗体的问题
- QUICKREP自定义纸张大小
- 数据导出Excell问题
- BDE下的SQL问题:取子串函数
- Delphi7中ComboBox.items.add('')后提取时总出现非法操作?
- 如何改变自己写的VCL(组件)加到Delphi中的图标(现在是红、黄、蓝 三个点)?
- 关于 xpmenu 的问题
- 高分求解:Ado使用过程中导致内存泄漏问题。
- 关于GPIB编程
- FastReport的统计问题!谢谢关注!
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, nb30;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
function NBGetAdapterAddress(a: integer): string;
private
{ Private declarations } public
{ Public declarations }
end;var
Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage('您的第' + edit1.text + '个适配器的MAC地址为' + NBGetAdapterAddress(StrtoInt(Edit1.Text)));
end; function TForm1.NBGetAdapterAddress(a: integer): string;
//a指定多个网卡适配器中的哪一个0,1,2...
var
NCB: TNCB; // Netbios control block file://NetBios控制块
ADAPTER: TADAPTERSTATUS; // Netbios adapter status//取网卡状态
LANAENUM: TLANAENUM; // Netbios lana
intIdx: Integer; // Temporary work value//临时变量
cRC: Char; // Netbios return code//NetBios返回值
strTemp: string; // Temporary string//临时变量
begin
// Initialize
Result := '';
try
// Zero control blocl
ZeroMemory(@NCB, SizeOf(NCB));
// Issue enum command
NCB.ncb_command := Chr(NCBENUM);
cRC := NetBios(@NCB);
// Reissue enum command
NCB.ncb_buffer := @LANAENUM;
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
if Ord(cRC) <> 0 then
exit;
// Reset adapter
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[a];
cRC := NetBios(@NCB);
if Ord(cRC) <> 0 then
exit;
// Get adapter address
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LANAENUM.lana[a];
StrPCopy(NCB.ncb_callname, '*');
NCB.ncb_buffer := @ADAPTER;
NCB.ncb_length := SizeOf(ADAPTER);
cRC := NetBios(@NCB);
// Convert it to string
strTemp := '';
for intIdx := 0 to 5 do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]), 2);
Result := strTemp;
finally
end;
end;end.
function HexBL(by:Byte):string;
begin
result:=format('%x',[by]);
if length(result)<2 then
result:='0'+result;
end;
var
NCB:TNCB;
Adapter:TAdapterStatus;
LanaEnum:TLanaEnum;
I,J:Integer;
Str:String;
begin
strings.clear;
ZeroMemory(@NCB,sizeof(NCB));
NCB.ncb_command:=chr(NCBENUM);
NetBios(@NCB);
NCB.ncb_buffer:=@LanaEnum;
NCB.ncb_length:=sizeof(lanaEnum);
NCB.ncb_command:=chr(NCBENUM);
NetBios(@NCB);
for i:=0 to ord(LanaEnum.length)-1 do
begin
zeromemory(@NCB,sizeof(NCB));
NCB.ncb_command:=chr(NCBRESET);
NCB.ncb_lana_num:=lanaEnum.lana[i];
netbios(@NCB);
zeromemory(@NCB,sizeof(NCB));
NCB.ncb_command:=chr(NCBSTART);
NCB.ncb_Lana_num:=LanaEnum.lana[i];
strPcopy(NCB.ncb_callname,'*');
NCB.ncb_buffer:=@Adapter;
NCB.ncb_length:=sizeof(Adapter);
netbios(@NCB);
str:='';
for j:=0 to 5 do
begin
if j>0 then str:=str+'-';
str:str+HexBL(byte(adapter.adapter_address[j]));
end;
strings.add(str);
end;
end;