当前位置: 行情首页 >> 技术文章 >> 技术文章 >> 请问delphi读网卡的函数?

  • 请问delphi读网卡的函数? 专题开发/技术/项目 / 网络通信
  • 2007-10-18 15:40:30 杭州电脑数码城 转载来源:csdn.net
  • 社区 - 专题开发/技术/项目 / 网络通信

    请问delphi读网卡的函数?

    () 2000-02-01 16:26:00在 专题开发/技术/项目 / 网络通信 提问


    问题点数:0、回复次数:3

    1楼 kxy (手举穿肠毒药,怀抱刮骨钢刀) 回复于 2000-02-01 16:40:00 得分 0


    看看下面的几个函数是否合适:

    //取网卡地址(MAC)列表
    procedure NBGetMac(Strings: TStrings);
    //取第一个非零的网卡地址
    function NBGetFirstMac: String;
    //判断指定网卡地址是否存在
    function NBIsMacInList(Mac: String): Boolean;

    procedure NBGetMac(Strings: TStrings);
    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(NCBASTAT);
    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;

    function NBGetFirstMac: String;
    var
    Strings: TStringList;
    I, J: Integer;
    begin
    Result := '';
    Strings := TStringList.Create;
    try
    NBGetMac(Strings);
    for I := 0 to Strings.Count - 1 do
    begin
    for J := 1 to Length(Strings.Strings[I]) do
    if (Strings.Strings[I][J] <> '0') and
    (Strings.Strings[I][J] <> '-') then
    begin
    Result := Strings.Strings[I];
    Break;
    end;
    if Result <> '' then Break;
    end;
    finally
    Strings.Free;
    end;
    end;

    function NBIsMacInList(Mac: String): Boolean;
    var
    Strings: TStringList;
    I: Integer;
    begin
    Result := False;
    Strings := TStringList.Create;
    try
    NBGetMac(Strings);
    for I := 0 to Strings.Count - 1 do
    begin
    if Strings.Strings[I] = Mac then
    begin
    Result := True;
    Break;
    end;
    end;
    finally
    Strings.Free;
    end;
    end;



    2楼 () 回复于 2000-02-01 20:56:00 得分 0


    真是高手

    3楼 () 回复于 2000-02-19 20:43:00 得分 0


    I agree.

竟价广告:

    业界行情新闻声明事项:

    • ☉本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性!
    • ☉如其他媒体、网站或个人从本网下载使用,必须保留本网注明的“稿件来源”,并自负版权等法律责任。如对稿件内容有疑议,请及时与我们联系.
    • ☉如本网转载稿涉及版权等问题,请作者在速来电或来函与杭州电脑数码城网联系.
    • ☉本站网址:http://www.ititt.com/投诉邮箱:6371222@qq.com