線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2040
推到 Plurk!
推到 Facebook!

以ActiveX取得Client端使用者的MAC並新增一method傳回MAC值

缺席
lanlor
一般會員


發表:1
回覆:1
積分:0
註冊:2007-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-08 09:42:49 IP:124.219.xxx.xxx 訂閱
請問各位前輩:
目前在做一功能
想利用ActiveX來取得web上client端使用者的MAC
取得之後在此ActiveX上新增一method
將MAC值傳回到Server

但遇到的問題是,回傳的MAC值為undefined
請問各位前輩是否能指引一個方向
以下為我的code(P.S. code有參考站上前人的文章)


<抓取網卡>
[code delphi]
uses NB30;

function GetAdapterInfo(Lana: Char): String;
var
Adapter: TAdapterStatus;
NCB: TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBRESET);
NCB.ncb_lana_num := AnsiChar(Lana);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := 'mac not found';
Exit;
end;
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBASTAT);
NCB.ncb_lana_num := AnsiChar(Lana);
NCB.ncb_callname := '*';
FillChar(Adapter, SizeOf(Adapter), 0);
NCB.ncb_buffer := @Adapter;
NCB.ncb_length := SizeOf(Adapter);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := 'mac not found';
Exit;
end;
Result :=
IntToHex(Byte(Adapter.adapter_address[0]), 2) '-'
IntToHex(Byte(Adapter.adapter_address[1]), 2) '-'
IntToHex(Byte(Adapter.adapter_address[2]), 2) '-'
IntToHex(Byte(Adapter.adapter_address[3]), 2) '-'
IntToHex(Byte(Adapter.adapter_address[4]), 2) '-'
IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;

function GetMACAddressAll: string;
var
AdapterList: TLanaEnum;
NCB: TNCB;
MAC: String;
lana_num: integer;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBENUM);
NCB.ncb_buffer := @AdapterList;
NCB.ncb_length := SizeOf(AdapterList);
Netbios(@NCB);
MAC := '';
lana_num :=0;
Result :='';
if Byte(AdapterList.length) > 0 then
while (MAC<>'mac not found') do
begin
if Result='' then
Result := Result MAC
else
Result := Result ', ' MAC;
MAC := GetAdapterInfo(Char(AdapterList.lana[lana_num]));
lana_num := lana_num 1;
end
else
Result := 'mac not found';
end;
[/code]

<在public新增一method>
[code delphi]
public
{ Public declarations }
procedure GetMAC; safecall;export;

procedure TGetMACX.GetMAC; export;
begin
GetMACAddressAll;
end;

[/code]


<網頁>
[code xml]
<OBJECT<br /> id=objOCX
classid="clsid:48B64086-53AB-4FEE-89AC-8067A8260041"
codebase="PackagesAtx.ocx#version=6,0,0,0"
hspace=0
vspace=0
width=0
height=0
>
</OBJECT><br />

var str = objOCX.GetMAC();
alert(str); //這裡alert出的值為undefined,還請指點,謝謝!!

[/code]


編輯記錄
lanlor 重新編輯於 2009-09-08 09:47:35, 註解 無‧
lanlor
一般會員


發表:1
回覆:1
積分:0
註冊:2007-07-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-30 17:37:01 IP:124.219.xxx.xxx 訂閱
已解決!
在method裡加一個參數,並設為RetVal,讓他可回傳即可
系統時間:2024-04-25 21:23:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!