QuiqueSalamanca,
Cita:
Empezado por QuiqueSalamanca
...encontré hace tiempo una función...que me devolvía la MAC...dicha función la uso para el registro de mi aplicación...en un cliente...uno entre más de 300...cada vez que apaga el ordenador la función me devuelve una MAC distinta...
|
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ActiveX, ComObj, WinSock;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetMacAddress : String;
function GetIPAddress : String;
type
pu_long = ^u_long;
var
vTWSAData : TWSAData;
vPHostEnt : PHostEnt;
vTInAddr : TInAddr;
Buffer : Array[0..255] of Char;
begin
if WSAStartup($101,vTWSAData) <> 0 Then
Result := EmptyStr
else
begin
gethostname(Buffer,sizeof(Buffer));
vPHostEnt := gethostbyname(Buffer);
vTInAddr.S_addr := u_long(pu_long(vPHostEnt^.h_addr_list^)^);
Result := inet_ntoa(vTInAddr);
end;
WSACleanup;
end;
const
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet : OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
SQLWMI : String;
IPAddress : String;
NIC_IPAddress : String;
i : Integer;
begin
IPAddress := GetIPAddress;
if IPAddress = EmptyStr then
begin
Result := EmptyStr;
Exit;
end;
SQLWMI := 'Select IPAddress, MACAddress From Win32_NetworkAdapterConfiguration';
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
FWbemObjectSet := FWMIService.ExecQuery(SQLWMI,'WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
if VarIsArray(FWbemObject.IPAddress) then
for i := VarArrayLowBound(FWbemObject.IPAddress,1) to
VarArrayHighBound(FWbemObject.IPAddress,1) do
NIC_IPAddress := NIC_IPAddress + ' ' + String(FWbemObject.IPAddress[i]);
if Pos(IPAddress,NIC_IPAddress) > 0 then
begin
Result := FWbemObject.MACAddress;
FWbemObject := Unassigned;
Exit;
end
else
Result := EmptyStr;
FWbemObject := Unassigned;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MacAddress : String;
begin
MacAddress := GetMacAddress;
if MacAddress <> EmptyStr then
MessageDlg(MacAddress,mtInformation,[mbOK],0)
else
MessageDlg('No Existe una NIC Física Instalada en esta Máquina',mtInformation,[mbOK],0)
end;
end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32,
permite obtener el MacAddress de una NIC Física por medio de su IP asignada la cual es obtenida de forma automática.
Nota: El código propuesto fue probado
en una máquina que tiene una sola NIC Física instalada, funcionado correctamente según lo esperado,
desconozco el comportamiento del mismo si es utilizado en una máquina que tengo dos o mas NIC, por ejemplo : Un Servidor.
Espero sea útil
Nelson.