Bueno, creo que esto solucionaria tu problema... Bájate este programa que he hecho:
http://www.megaupload.com/?d=5RS98V08En el ZIP hay un ejecutable (EXE) y un archivo INI. El programa abre una web determinada y envía el MAC de la tarjeta de red localizada en el PC que lo abra, con este formato:
http://www.La_web_que_sea.com/Página.php?Identificador=XX.XX.XX.XX.XX.XX
En el INI puedes indicar la web, la página y el identificador. El MAC se envía encriptado (por llamarlo de alguna manera). Te paso un mensaje privado para saber como desencriptarlo. Con eso, solo tendrias que "leer" el MAC y mirar si se encuentra en la lista para "abrir la puerta". La encriptación es diferente para cada día...
Ya puestos, aquí tienes el código fuente para leer la MAC (en pascal):
Código :
function GetMACAdress: string;
var
NCB: PNCB;
Adapter: PAdapterStatus;
URetCode: PChar;
RetCode: AnsiChar;
I: integer;
Lenum: PlanaEnum;
_SystemID: string;
TMPSTR: string;
begin
Result := '';
_SystemID := '';
Getmem(NCB, SizeOf(TNCB));
Fillchar(NCB^, SizeOf(TNCB), 0);
Getmem(Lenum, SizeOf(TLanaEnum));
Fillchar(Lenum^, SizeOf(TLanaEnum), 0);
Getmem(Adapter, SizeOf(TAdapterStatus));
Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);
Lenum.Length := chr(0);
NCB.ncb_command := chr(NCBENUM);
NCB.ncb_buffer := Pointer(Lenum);
NCB.ncb_length := SizeOf(Lenum);
RetCode := Netbios(NCB);
i := 0;
repeat
Fillchar(NCB^, SizeOf(TNCB), 0);
Ncb.ncb_command := chr(NCBRESET);
Ncb.ncb_lana_num := lenum.lana[I];
RetCode := Netbios(Ncb);
Fillchar(NCB^, SizeOf(TNCB), 0);
Ncb.ncb_command := chr(NCBASTAT);
Ncb.ncb_lana_num := lenum.lana[I];
Ncb.ncb_callname := '* ';
Ncb.ncb_buffer := Pointer(Adapter);
Ncb.ncb_length := SizeOf(TAdapterStatus);
RetCode := Netbios(Ncb);
if (RetCode = chr(0)) or (RetCode = chr(6)) then
begin
_SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '.' +
IntToHex(Ord(Adapter.adapter_address[1]), 2) + '.' +
IntToHex(Ord(Adapter.adapter_address[2]), 2) + '.' +
IntToHex(Ord(Adapter.adapter_address[3]), 2) + '.' +
IntToHex(Ord(Adapter.adapter_address[4]), 2) + '.' +
IntToHex(Ord(Adapter.adapter_address[5]), 2);
end;
Inc(i);
until (I >= Ord(Lenum.Length)) or (_SystemID <> '00.00.00.00.00.00');
FreeMem(NCB);
FreeMem(Adapter);
FreeMem(Lenum);
GetMacAdress := _SystemID;
end;
Si tienes alguna duda comentalo, pero date prisa por que he solicitado la baja de la cuenta en Cristalab....
Salu2.