| 发表于:2007-01-19 17:28:031楼 得分:0 |
const snetbioserror = 'netbios错误%d '; type tmacaddress = packed array[0..5] of byte; enetbioserror = class(exception); tastat = record adapt: tadapterstatus; namebuff: array[0..30] of tnamebuffer; end; function getmacaddress(adapternum: integer): tmacaddress; var ncb: tncb; uretcode: char; j: integer; adapter: tastat; begin fillchar(ncb, sizeof(ncb), 0); with ncb do begin ncb_command := char(ncbreset); ncb_lana_num := char(adapternum); end; uretcode := netbios(@ncb); if uretcode <> #0 then raise exception.createfmt(snetbioserror, [ord(uretcode)]); fillchar(ncb, sizeof(ncb), 0); with ncb do begin ncb_command := char(ncbastat); ncb_lana_num := char(adapternum); strcopy(ncb_callname, '* '); ncb_buffer := @adapter; ncb_length := sizeof(adapter); end; uretcode := netbios(@ncb); if uretcode <> #0 then raise exception.createfmt(snetbioserror, [ord(uretcode)]); for j := 0 to 5 do result[j] := ord(adapter.adapt.adapter_address[j]); end; 方法2: uses nb30; function nbgetadapteraddress(a: integer): string; var ncb: tncb; // netbios control block //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 result := ' '; try zeromemory(@ncb, sizeof(ncb)); // zero control blocl ncb.ncb_command := chr(ncbenum); // issue enum command crc := netbios(@ncb); ncb.ncb_buffer := @lanaenum; // reissue enum command ncb.ncb_length := sizeof(lanaenum); crc := netbios(@ncb); if ord(crc) <> 0 then exit; zeromemory(@ncb, sizeof(ncb)); // reset adapter ncb.ncb_command := chr(ncbreset); ncb.ncb_lana_num := lanaenum.lana[a]; crc := netbios(@ncb); if ord(crc) <> 0 then exit; zeromemory(@ncb, sizeof(ncb)); // get adapter address 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); strtemp := ' '; // convert it to string for intidx := 0 to 5 do strtemp := strtemp + inttohex(integer(adapter.adapter_address[intidx]), 2); result := strtemp; finally end; end; | | |
|