MACアドレスがうまく取れません、
コチラの方法では取れないPCも出現したりします、この方法は
環境によっての不安定さが無いと表記してあったものにはなるのですが
https://www.petitmonte.com/bbs/answers?question_id=6860
うまくMACアドレスを取得する方法を宜しくお願いします。
リモートPCのmacアドレスですから当然、
相手PCがそれなりのプロトコルに対応してなければ取得は不可能です。
確実にmacアドレスを取得する方法なんてありませんョ。
http://homepage3.nifty.com/sugaku/Mac.htm
すいません、私が取得したいのは自分のMACアドレスなのですが、
すいません宜しくお願いします。
https://www.petitmonte.com/bbs/answers?question_id=84
でどうでしょう。
MSDNへのリンクが切れていますが多分ここです。
[SDK32] イーサネット アダプタのMACアドレスを取得する
http://support.microsoft.com/kb/118623/ja
またIPHELPERの
GetIfTable API
GetAdaptersInfo API
などでも取得できます。
k様ありがとうございます、
https://www.petitmonte.com/bbs/answers?question_id=84
コチラのほうも試みてみたのですがDelphi2010ではそのままでは動かず結局動かすことができませんでした。
もう少し手ほどきを宜しくお願いします。
できれば掲示板のルール位は把握して頂きたいです。
こういうところでは動作しない場合、どんなエラーが出るのかまで書かないと対応できません。
というわけでにしのさんのソースを丸々コピーしてみました。
Button1.onClickだけ追加して以下のソースをコピペしてください。
動作確認はVista Delphi2009です。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
nb30;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//https://www.petitmonte.com/bbs/answers?question_id=84
function GetMacAdress:string;
type
PAstat = ^TAstat;
TAstat = packed record
adapt: TAdapterStatus;
NameBuff: array [0 .. 29] of TNameBuffer;
end;
var
Adapter: TAstat;
Ncb: TNCB;
RetCode: Integer;
lenum: TLanaEnum;
i: integer;
begin
Result := '';
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
Result := Result +
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) + #$D#$A;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetMacAdress);
end;
end.
monaa様、完璧です、素晴らしい。
ほんとうにありがとうございます。
ツイート | ![]() |