当前位置: 首页 > 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;

相关文章:

  • 四大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
  • 网站如何做优化推广/关键词点击工具
  • 中国建筑工程网施工组织设计/抖音搜索排名优化
  • 西安网站seo收费/福州网站快速排名提升
  • 网站建设胶州家园/电商网站建设哪家好
  • 济南冰河世纪网站建设/青岛seo杭州厂商
  • 两个网站做响应式网站/百度搜索指数的数据来源