如何获得机器得MAC地址?(在线等待) 如何获得机器得MAC地址?用哪个函数。谢谢先! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 type TNBLanaResources = (lrAlloc, lrFree);type PMACAddress = ^TMACAddress; TMACAddress = array[0..5] of Byte;function GetLanaEnum(LanaEnum: PLanaEnum): Byte;var LanaEnumNCB: PNCB;begin New(LanaEnumNCB); ZeroMemory(LanaEnumNCB, SizeOf(TNCB)); try with LanaEnumNCB^ do begin ncb_buffer := PChar(LanaEnum); ncb_length := SizeOf(TLanaEnum); ncb_command := Char(NCBENUM); NetBios(LanaEnumNCB); Result := Byte(ncb_cmd_cplt); end; finally Dispose(LanaEnumNCB); end;end;function ResetLana(LanaNum, ReqSessions, ReqNames: Byte; LanaRes: TNBLanaResources): Byte;var ResetNCB: PNCB;begin New(ResetNCB); ZeroMemory(ResetNCB, SizeOf(TNCB)); try with ResetNCB^ do begin ncb_lana_num := Char(LanaNum); // Set Lana_Num ncb_lsn := Char(LanaRes); // Allocation of new resources ncb_callname[0] := Char(ReqSessions); // Query of max sessions ncb_callname[1] := #0; // Query of max NCBs (default) ncb_callname[2] := Char(ReqNames); // Query of max names ncb_callname[3] := #0; // Query of use NAME_NUMBER_1 ncb_command := Char(NCBRESET); NetBios(ResetNCB); Result := Byte(ncb_cmd_cplt); end; finally Dispose(ResetNCB); end;end;function NBGetAdapterAddress(a: integer): String;Var NC:TNCB; ADAPTE : TADAPTERSTATUS; LANAENU : TLANAENUM; intId : Integer; cR : Char; strTem : String; Begin Result := ''; Try ZeroMemory(@NC, SizeOf(NC)); NC.ncb_command:=Chr(NCBENUM); cR := NetBios(@NC); // Reissue enum command NC.ncb_buffer := @LANAENU; NC.ncb_length := SizeOf(LANAENU); cR := NetBios(@NC); If Ord(cR)<>0 Then exit; ZeroMemory(@NC, SizeOf(NC)); NC.ncb_command := Chr(NCBRESET); NC.ncb_lana_num := LANAENU.lana[a]; cR := NetBios(@NC); If Ord(cR)<>0 Then exit; ZeroMemory(@NC, SizeOf(NC)); NC.ncb_command := Chr(NCBASTAT); NC.ncb_lana_num := LANAENU.lana[a]; StrPCopy(NC.ncb_callname, '*'); NC.ncb_buffer := @ADAPTE; NC.ncb_length := SizeOf(ADAPTE); cR := NetBios(@NC); strTem := ''; For intId := 0 To 5 Do strTem := strTem+ InttoHex(Integer(ADAPTE.adapter_address[intId]),2); Result := strTem; Finally End;end;function GetMACAddress(LanaNum: Byte; MACAddress: PMACAddress): Byte;var AdapterStatus: PAdapterStatus; StatNCB: PNCB;begin New(StatNCB); ZeroMemory(StatNCB, SizeOf(TNCB)); StatNCB.ncb_length := SizeOf(TAdapterStatus) + 255 * SizeOf(TNameBuffer); GetMem(AdapterStatus, StatNCB.ncb_length); try with StatNCB^ do begin ZeroMemory(MACAddress, SizeOf(TMACAddress)); ncb_buffer := PChar(AdapterStatus); ncb_callname := '* ' + #0; ncb_lana_num := Char(LanaNum); ncb_command := Char(NCBASTAT); NetBios(StatNCB); Result := Byte(ncb_cmd_cplt); if Result = NRC_GOODRET then MoveMemory(MACAddress, AdapterStatus, SizeOf(TMACAddress)); end; finally FreeMem(AdapterStatus); Dispose(StatNCB); end;end;procedure GetBuildInfo(var m1, m2,r, b: Word);var VerInfoSize: DWORD; VerInfo: Pointer; VerValueSize: DWORD; VerValue: PVSFixedFileInfo; Dummy: DWORD;begin VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy); GetMem(VerInfo, VerInfoSize); GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo); if VerInfo <> nil then begin VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); with VerValue^ do begin m1 := dwFileVersionMS shr 16; m2 := dwFileVersionMS and $FFFF; r := dwFileVersionLS shr 16; b := dwFileVersionLS and $FFFF; end; end else begin m1:=1; m2:=1; end; FreeMem(VerInfo, VerInfoSize);end;Function GetMacFunction:String ;var LanaNum: Byte; MACAddress: PMACAddress; RetCode: Byte; StrAddr:String ;begin RetCode := ResetLana(0, 0, 0, lrAlloc); New(MACAddress); try RetCode := GetMACAddress(0, MACAddress); if RetCode = NRC_GOODRET then begin // StrAddr := Format('%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x', StrAddr := Format('%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x', [MACAddress[0], MACAddress[1], MACAddress[2], MACAddress[3], MACAddress[4], MACAddress[5]]); Result:= StrAddr; end else begin Beep; //ShowMessage('GetMACAddress Error! RetCode = $' + IntToHex(RetCode, 2)); end; finally Dispose(MACAddress); end;end; 有几种方法: 一。 WINEXEC(PCHAR('CMD /C IPCONFIG /ALL > C:\TEMP.TXT'),SW_HIDE);二。如何取的網卡的MAC號簡介:function TForm1.NBGetAdapterAddress(a: integer): String;//a指定多個網卡適配器中的哪一個0,1,2...VarNCB:TNCB; // Netbios control block file://NetBios控制塊ADAPTER : TADAPTERSTATUS; // Netbios adapter status//取網卡狀態LANAENUM : TLANAENUM; // Netbios lanaintIdx : Integer; // Temporary work value//臨時變數cRC : Char; // Netbios return code//NetBios返回值strTemp : String; // Temporary string//臨時變數Begin// InitializeResult := '';Try// Zero control bloclZeroMemory(@NCB, SizeOf(NCB));// Issue enum commandNCB.ncb_command:=Chr(NCBENUM);cRC := NetBios(@NCB);// Reissue enum commandNCB.ncb_buffer := @LANAENUM;NCB.ncb_length := SizeOf(LANAENUM);cRC := NetBios(@NCB);If Ord(cRC)0 Thenexit;// Reset adapterZeroMemory(@NCB, SizeOf(NCB));NCB.ncb_command := Chr(NCBRESET);NCB.ncb_lana_num := LANAENUM.lana[a];cRC := NetBios(@NCB);If Ord(cRC)0 Thenexit;// Get adapter addressZeroMemory(@NCB, SizeOf(NCB));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);// Convert it to stringstrTemp := '';For intIdx := 0 To 5 DostrTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2);Result := strTemp;FinallyEnd;最後別忘了uses nb30.pas經測試,98,2000下皆可用 像QQ一样可以复制粘贴文件(等于发送)的功能怎么实现? 如何限制memo只能输入2行文字 数据库 添加 修改 保存 小问题 解决立马给分!! 求教一下有关字符串的分解的问题 如何使用钩子对磁盘上文件的创建和修改操作做监控! SQL的一个简单问题: 【高人来帮我】应该说是很简单的查询语句,但真正做起来为什么就不行呢? ActiveX在WEB中应用的问题 请问在intraweb中怎样实现文件上传下载? SQL Server 2000求救 如何读取一个double类型的数据文件! c++可以操作;是不是delphi不行呢? 怎样设置桌面的工具栏
type
TNBLanaResources = (lrAlloc, lrFree);
type
PMACAddress = ^TMACAddress;
TMACAddress = array[0..5] of Byte;function GetLanaEnum(LanaEnum: PLanaEnum): Byte;
var
LanaEnumNCB: PNCB;
begin
New(LanaEnumNCB);
ZeroMemory(LanaEnumNCB, SizeOf(TNCB));
try
with LanaEnumNCB^ do
begin
ncb_buffer := PChar(LanaEnum);
ncb_length := SizeOf(TLanaEnum);
ncb_command := Char(NCBENUM);
NetBios(LanaEnumNCB);
Result := Byte(ncb_cmd_cplt);
end;
finally
Dispose(LanaEnumNCB);
end;
end;
function ResetLana(LanaNum, ReqSessions, ReqNames: Byte;
LanaRes: TNBLanaResources): Byte;
var
ResetNCB: PNCB;
begin
New(ResetNCB);
ZeroMemory(ResetNCB, SizeOf(TNCB));
try
with ResetNCB^ do
begin
ncb_lana_num := Char(LanaNum); // Set Lana_Num
ncb_lsn := Char(LanaRes); // Allocation of new resources
ncb_callname[0] := Char(ReqSessions); // Query of max sessions
ncb_callname[1] := #0; // Query of max NCBs (default)
ncb_callname[2] := Char(ReqNames); // Query of max names
ncb_callname[3] := #0; // Query of use NAME_NUMBER_1
ncb_command := Char(NCBRESET);
NetBios(ResetNCB);
Result := Byte(ncb_cmd_cplt);
end;
finally
Dispose(ResetNCB);
end;
end;
function NBGetAdapterAddress(a: integer): String;
Var
NC:TNCB;
ADAPTE : TADAPTERSTATUS;
LANAENU : TLANAENUM;
intId : Integer;
cR : Char;
strTem : String;
Begin
Result := '';
Try
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command:=Chr(NCBENUM);
cR := NetBios(@NC);
// Reissue enum command
NC.ncb_buffer := @LANAENU;
NC.ncb_length := SizeOf(LANAENU);
cR := NetBios(@NC);
If Ord(cR)<>0 Then
exit;
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBRESET);
NC.ncb_lana_num := LANAENU.lana[a];
cR := NetBios(@NC);
If Ord(cR)<>0 Then
exit;
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBASTAT);
NC.ncb_lana_num := LANAENU.lana[a];
StrPCopy(NC.ncb_callname, '*');
NC.ncb_buffer := @ADAPTE;
NC.ncb_length := SizeOf(ADAPTE);
cR := NetBios(@NC);
strTem := '';
For intId := 0 To 5 Do
strTem := strTem+ InttoHex(Integer(ADAPTE.adapter_address[intId]),2);
Result := strTem;
Finally
End;end;
function GetMACAddress(LanaNum: Byte; MACAddress: PMACAddress): Byte;
var
AdapterStatus: PAdapterStatus;
StatNCB: PNCB;
begin
New(StatNCB);
ZeroMemory(StatNCB, SizeOf(TNCB));
StatNCB.ncb_length := SizeOf(TAdapterStatus) + 255 * SizeOf(TNameBuffer);
GetMem(AdapterStatus, StatNCB.ncb_length);
try
with StatNCB^ do
begin
ZeroMemory(MACAddress, SizeOf(TMACAddress));
ncb_buffer := PChar(AdapterStatus);
ncb_callname := '* ' + #0;
ncb_lana_num := Char(LanaNum);
ncb_command := Char(NCBASTAT);
NetBios(StatNCB);
Result := Byte(ncb_cmd_cplt);
if Result = NRC_GOODRET then
MoveMemory(MACAddress, AdapterStatus, SizeOf(TMACAddress));
end;
finally
FreeMem(AdapterStatus);
Dispose(StatNCB);
end;
end;
procedure GetBuildInfo(var m1, m2,r, b: Word);
var
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
Dummy: DWORD;
begin
VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
if VerInfo <> nil then
begin
VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
m1 := dwFileVersionMS shr 16;
m2 := dwFileVersionMS and $FFFF;
r := dwFileVersionLS shr 16;
b := dwFileVersionLS and $FFFF;
end;
end
else
begin
m1:=1;
m2:=1;
end;
FreeMem(VerInfo, VerInfoSize);
end;Function GetMacFunction:String ;
var
LanaNum: Byte;
MACAddress: PMACAddress;
RetCode: Byte;
StrAddr:String ;
begin
RetCode := ResetLana(0, 0, 0, lrAlloc);
New(MACAddress);
try
RetCode := GetMACAddress(0, MACAddress);
if RetCode = NRC_GOODRET then
begin
// StrAddr := Format('%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x',
StrAddr := Format('%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x',
[MACAddress[0], MACAddress[1], MACAddress[2],
MACAddress[3], MACAddress[4], MACAddress[5]]);
Result:= StrAddr;
end else
begin
Beep;
//ShowMessage('GetMACAddress Error! RetCode = $' + IntToHex(RetCode, 2));
end;
finally
Dispose(MACAddress);
end;
end;
一。 WINEXEC(PCHAR('CMD /C IPCONFIG /ALL > C:\TEMP.TXT'),SW_HIDE);
二。
如何取的網卡的MAC號
簡介:
function TForm1.NBGetAdapterAddress(a: integer): String;
//a指定多個網卡適配器中的哪一個0,1,2...
Var
NCB:TNCB; // Netbios control block file://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
// Initialize
Result := '';
Try
// Zero control blocl
ZeroMemory(@NCB, SizeOf(NCB));
// Issue enum command
NCB.ncb_command:=Chr(NCBENUM);
cRC := NetBios(@NCB);
// Reissue enum command
NCB.ncb_buffer := @LANAENUM;
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
If Ord(cRC)0 Then
exit;
// Reset adapter
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[a];
cRC := NetBios(@NCB);
If Ord(cRC)0 Then
exit;
// Get adapter address
ZeroMemory(@NCB, SizeOf(NCB));
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);
// Convert it to string
strTemp := '';
For intIdx := 0 To 5 Do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2);
Result := strTemp;
Finally
End;最後別忘了uses nb30.pas
經測試,98,2000下皆可用