delphi 获取MAC地址
2020-02-18 00:21
555 查看
delphi 获取MAC地址
function GetMacAddress(const AServerName : string='') : string; type TNetTransportEnum = function(pszServer : PWideChar; Level : DWORD; var pbBuffer : pointer; PrefMaxLen : LongInt; var EntriesRead : DWORD; var TotalEntries : DWORD; var ResumeHandle : DWORD) : DWORD; stdcall; TNetApiBufferFree = function(Buffer : pointer) : DWORD; stdcall; PTransportInfo = ^TTransportInfo; TTransportInfo = record quality_of_service : DWORD; number_of_vcs : DWORD; transport_name : PWChar; transport_address : PWChar; wan_ish : boolean; end; var E,ResumeHandle, EntriesRead, TotalEntries : DWORD; FLibHandle : THandle; sMachineName, sMacAddr, Retvar : string; pBuffer : pointer; pInfo : PTransportInfo; FNetTransportEnum : TNetTransportEnum; FNetApiBufferFree : TNetApiBufferFree; pszServer : array[0..128] of WideChar; i,ii,iIdx : integer; begin sMachineName := trim(AServerName); Retvar := '00-00-00-00-00-00'; // Add leading \\ if missing if (sMachineName <> '') and (length(sMachineName) >= 2) then begin if copy(sMachineName,1,2) <> '\\' then sMachineName := '\\' + sMachineName end; // Setup and load from DLL pBuffer := nil; ResumeHandle := 0; FLibHandle := LoadLibrary('NETAPI32.DLL'); // Execute the external function if FLibHandle <> 0 then begin @FNetTransportEnum := GetProcAddress(FLibHandle,'NetWkstaTransportEnum'); @FNetApiBufferFree := GetProcAddress(FLibHandle,'NetApiBufferFree'); E := FNetTransportEnum(StringToWideChar(sMachineName,pszServer,129),0, pBuffer,-1,EntriesRead,TotalEntries,Resumehandle); if E = 0 then begin pInfo := pBuffer; // Enumerate all protocols – look for TCPIP for i := 1 to EntriesRead do begin if pos('TCPIP',UpperCase(pInfo^.transport_name)) <> 0 then begin // Got It – now format result xx-xx-xx-xx-xx-xx iIdx := 1; sMacAddr := pInfo^.transport_address; for ii := 1 to 12 do begin Retvar[iIdx] := sMacAddr[ii]; inc(iIdx); if iIdx in [3,6,9,12,15] then inc(iIdx); end; end; inc(pInfo); end; if pBuffer <> nil then FNetApiBufferFree(pBuffer); end; try FreeLibrary(FLibHandle); except // 错误处理 end; end; result:=Retvar; end;
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- delphi 获取文件的相关时间
- Delphi 中串口通讯的实现
- Delphi中MsComm控件的安装使用
- Delphi读取本机存在的串口
- delphi6+winxp的DLL断点调试
- DELPHI 控制EXCEL
- Delphi 2007 安装程序不能放在中文目录下安装.
- DELPHI国外经典站
- delphi中PE文件结构
- delphi中使用ADOQuery时的中文参数问题
- 通过delphi将秒数转换成日期格式
- 通过delphi将秒数转换成日期格式
- VC调用Delphi制作的动态链接库如何互相传递字符串
- Delphi 中用 GetEnvironmentVariable 获取常用系统变量
- Speed up the display of Delphi list components
- 用Delphi写ActiveX的经验
- Delphi6利用WebService 编写 SendEMail程序
- delphi 中分隔符分隔的字符串
- Delphi快速从文件流读取数据存入本地txt
- Delphi Opendialog用法