当前位置: 首页 > 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.dtcms.com/a/243197.html

相关文章:

  • 四大LLM 微调开源工具包深度解析
  • 算法第13天|继续学习二叉树:平衡二叉树(递归)、二叉树所有路径(递归)、左叶子之和(递归)
  • mysql如何快速生成测试大数据库
  • Rust 学习笔记:关于 Future trait 和 Async 语法的练习题
  • 项目练习:使用mybatis的foreach标签,实现union all的拼接语句
  • 【Linux shell】条件判断和流程控制
  • 第十四章 Linux实操篇——进程管理(重点)
  • 网络原理8 - HTTP协议1
  • AI Agent 核心策略解析:Function Calling 与 ReAct 的设计哲学与应用实践
  • python打卡day51
  • 计算机视觉与深度学习 | 两种经典的低照度增强算法:多尺度Retinex(MSR)和自适应直方图均衡化(CLAHE)
  • 我们来学mysql -- keepalive主从高可用
  • YOLOv1 技术详解:目标检测的实时革命
  • 为何AI推理正推动云计算从集中式向分布式转型
  • React Native UI 框架与动画系统:打造专业移动应用界面
  • 网络请求与本地存储:Axios 与 AsyncStorage 在 React Native 中的应用
  • 深入偏微分方程的世界-AI云计算
  • 开源 java android app 开发(十二)封库.aar
  • 基于React Native的HarmonyOS 5.0休闲娱乐类应用开发
  • Android的Dalvik和ART
  • 【DETR目标检测】ISTD-DETR:一种基于DETR与超分辨率技术的红外小目标检测深度学习算法
  • 修仙处于平凡
  • 华为服务器obsutil使用方法
  • 计算机网络:认证和授权 DNS 域名解析过程(如何转换为ip地址) http无状态 5**服务端错误相关的响应状态码 tcp某次握手丢失会有什么现象?
  • WPP 媒体推出基于人工智能的工具突破基于身份识别的定向模式
  • 摄影入门:相机基本参数解析
  • SpringBoot学习day2-前后端的交互搭建以及跨域问题、拦截过滤器问题的解决
  • FEMFAT许可使用数据分析工具介绍
  • Jetson NX 从nvme恢复的emmc启动的方法
  • 华为交换机远程登录配置