当前位置: 首页 > news >正文

Delphi 获取 XP系统 mac地址

在Delphi中获取Mac地址,你可以使用Windows API或者第三方库。以下是几种常见的方法:

方法1:使用Windows API

在Delphi中,你可以使用GetAdaptersInfoGetAdaptersAddresses函数来获取网络适配器的信息,包括MAC地址。

使用GetAdaptersInfo
  1. 首先,需要包含必要的头文件。

    #include <iphlpapi.h>
    #pragma comment(lib, "iphlpapi.lib")

    2、然后,编写代码来获取MAC地址。

usesWindows, IPHlpAPI;function GetMACAddress: string;
varpAdapterInfo: PIP_ADAPTER_INFO;dwSize: ULONG;Status: DWORD;pIPAddr: PIP_ADDR_STRING;
beginpAdapterInfo := nil;dwSize := 0;Status := GetAdaptersInfo(pAdapterInfo, dwSize);if Status = ERROR_BUFFER_OVERFLOW then beginGetMem(pAdapterInfo, dwSize);tryStatus := GetAdaptersInfo(pAdapterInfo, dwSize);if Status = NO_ERROR then beginwhile pAdapterInfo <> nil do beginResult := StringReplace(pAdapterInfo.Address, '-', ':', [rfReplaceAll]); // 转换为标准MAC地址格式Exit; // 找到第一个适配器就返回其MAC地址pAdapterInfo := pAdapterInfo.Next;end;end;finallyFreeMem(pAdapterInfo);end;end;
end;
使用GetAdaptersAddresses

GetAdaptersAddressesGetAdaptersInfo的更现代和功能更丰富的替代品。

  1. 包含头文件。

#include <iphlpapi.h>
#pragma comment(lib, "iphlpapi.lib")

2、编写代码。

usesWindows, IPHlpAPI;function GetMACAddress: string;
varpAddresses: PIP_ADAPTER_ADDRESSES;dwSize: ULONG;dwRetVal: DWORD;
beginpAddresses := nil;dwSize := 0;dwRetVal := GetAdaptersAddresses(AF_UNSPEC, 0, nil, pAddresses, dwSize);if dwRetVal = ERROR_BUFFER_OVERFLOW then beginGetMem(pAddresses, dwSize);trydwRetVal := GetAdaptersAddresses(AF_UNSPEC, 0, nil, pAddresses, dwSize);if dwRetVal = ERROR_SUCCESS then beginwhile pAddresses <> nil do beginResult := StringReplace(pAddresses.PhysicalAddressString, '-', ':', [rfReplaceAll]); // 转换为标准MAC地址格式Exit; // 找到第一个适配器就返回其MAC地址pAddresses := pAddresses.Next;end;end;finallyFreeMem(pAddresses);end;end;
end;

方法2:

uses nb30;function NBGetAdapterAddress(a: Integer): string;
var
NCB: TNCB; 
ADAPTER: TADAPTERSTATUS; 
LANAENUM: TLANAENUM; 
intIdx: Integer; 
cRC: Char;
strTemp: string; 
begin
Result := '';try
ZeroMemory(@NCB, SizeOf(NCB)); // Zero control bloclNCB.ncb_command := Chr(NCBENUM); // Issue enum command
cRC := NetBios(@NCB);NCB.ncb_buffer := @LANAENUM; // Reissue enum command
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
if Ord(cRC) <> 0 then
exit;ZeroMemory(@NCB, SizeOf(NCB)); // Reset adapter
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[a];
cRC := NetBios(@NCB);
if Ord(cRC) <> 0 then
exit;ZeroMemory(@NCB, SizeOf(NCB)); // Get adapter address
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);strTemp := ''; // Convert it to string
for intIdx := 0 to 5 do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]), 2);
Result := strTemp;
finally
end;
end;
http://www.xdnf.cn/news/987121.html

相关文章:

  • Selenium工作原理
  • 【leetcode】36. 有效的数独
  • 利用递归来遍历树
  • Android学习之Window窗口
  • 一个数组样式上要分成两个
  • Unity UGUI GraphicRaycaster.Raycast详解
  • 免费开源的微信开发框架
  • LangSmith 实战指南:大模型链路调试与监控的深度解析
  • Linux 内核 Slab 分配器核心组件详解
  • 【Linux】Linux高级I/O
  • 循环中的break和continue
  • Redis免费客户端工具推荐
  • Altair:用Python玩转声明式可视化(新手友好向)
  • C#委托代码记录
  • 推荐系统入门最佳实践:Slope One 算法详解与完整实现
  • 记录下blog的成长过程
  • 我的世界进阶模组开发教程——制作机械动力附属模组
  • MySQL存储引擎--深度解析
  • Go 语言 JWT 深度集成指南
  • 什么是哈希函数
  • C语言——深入解析字符串函数与其模拟实现
  • const auto 和 auto
  • Bash 脚本中的特殊变量
  • python使用SQLAlchemy 库操作本地的mysql数据库
  • python基本语法元素
  • python-docx 库教程
  • Oracle中10个索引优化
  • 美团NoCode中的Dev Mode 使用指南
  • 在windows中安装或卸载nginx
  • spring boot源码和lib分开打包