GUIDを生成して、下12桁からMACアドレスを取得する方法を
用いて開発していたのですが、Win2000だとうまくいきません。
Windows APIのNetBiosを使って取得する方法もあると
聞いたのですが・・・。
方法は問いませんのでどなたか教えていただけませんか?
C言語はわかりますか?
もしわかるなら、
http://www.microsoft.com/japan/support/kb/articles/J024/1/98.htm
で解決するかと思います。
忘れてました。
nb30ユニットで、NetBios、TNCBなどの定義があります。
上の例のDELPHI版です。
implementation以下に貼り付けてください。フォームの名前はForm1、貼り付けてあるのはMemo1です。
Form1のOnCreate(FormCreate)が、下のFormCreateです。
//--ここから
uses nb30;
type
PAstat = ^TAstat;
TAstat = packed record
adapt: TAdapterStatus;
NameBuff: array [0 .. 29] of TNameBuffer;
end;
var
Adapter: TAstat;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
Ncb: TNCB;
RetCode: Integer;
lenum: TLanaEnum;
i: integer;
begin
Memo1.Lines.Clear;
//
FillChar(Ncb, SizeOf(NCB), 0);
Ncb.ncb_command := Char(NCBENUM);
Ncb.ncb_buffer := @lenum;
Ncb.ncb_length := SizeOf(lenum);
RetCode := Integer(Netbios( @Ncb ));
Memo1.Lines.Add( 'The NCBENUM return code is: $' + IntToHex(RetCode, 2) );
for i := 0 to integer(lenum.length) - 1 do
begin
FillChar(Ncb, SizeOf(NCB), 0);
Ncb.ncb_command := Char(NCBRESET);
Ncb.ncb_lana_num := lenum.lana[i];
RetCode := Integer(Netbios( @Ncb ));
Memo1.Lines.Add( 'The NCBRESET on LANA ' + IntToStr(Integer(lenum.lana[i]))
+' return code is: $' + IntToHex(RetCode, 2) );
FillChar(Ncb, SizeOf(NCB), 0);
Ncb.ncb_command := Char(NCBASTAT);
Ncb.ncb_lana_num := lenum.lana[i];
Ncb.ncb_callname := '* ';
Ncb.ncb_buffer := @Adapter;
Ncb.ncb_length := SizeOf(Adapter);
RetCode := Integer(Netbios( @Ncb ));
Memo1.Lines.Add( 'The NCBASTAT on LANA ' + IntToStr(Integer(lenum.lana[i]))
+' return code is: $' + IntToHex(RetCode, 2) );
if RetCode = 0 then
begin
Memo1.Lines.Add('The Ethernet Number on LANA ' + IntToStr(Integer(lenum.lana[i]))
+ ' is:' + IntToHex(integer(Adapter.adapt.adapter_address[0]), 2)
+ '-' + IntToHex(integer(Adapter.adapt.adapter_address[1]), 2)
+ '-' + IntToHex(integer(Adapter.adapt.adapter_address[2]), 2)
+ '-' + IntToHex(integer(Adapter.adapt.adapter_address[3]), 2)
+ '-' + IntToHex(integer(Adapter.adapt.adapter_address[4]), 2)
+ '-' + IntToHex(integer(Adapter.adapt.adapter_address[5]), 2));
end;
end;
end;
//--ここまで
にしのさんはじめまして。
Win2000でのMACアドレスの取得に成功いたしました。
ありがとうございます。もう1件なのですが
上記の例で、MACアドレスの数値12桁のみを
var文で宣言した変数に代入したいのですが
どこをどうすればよいのでしょうか?
Delphi初心者なものでよくわかりません。
どうかよろしくお願いします。
成功しているのなら、Adapter.adapt.adapter_address配列に数値が入っています。上では、ハイフン区切りにしていますが、そのハイフンを取ってしまえばできますよ。
何度も申し訳ありません。
MACアドレスを12桁のみMemo1に表示することは出来たのですが
数値を開発中のシステム起動に使用するため、
Memoオブジェクトを使わずに何か変数に代入して
使いたいのです。いろいろ試してみたのですが
変数の型が合わなかったりとうまく変数にセットできません。
もう一度助言をお願い致します。
なんとか自分でできました。
初歩的なことから丁寧に教えていただき
本当に助かりました、ありがとうございます。
また宜しくお願い致します。
ツイート | ![]() |