Ir para conteúdo
Fórum Script Brasil
  • 0

Delphi Com Windows 2000


pedroalves

Pergunta

10 respostass a esta questão

Posts Recomendados

  • 0

Grande Pedro beleza

olha é o seguinte.. eu também uso GetMacAddress mas no meu win 2000 server e funciona.. agora.. pode ser alguma falha .. se quiser postar a parta da unit onde esta a funça o a galera dá uma olhada para você

abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest XinXanXun

uses NB30;

function GetAdapterInfo(Lana: Char): String;

var

Adapter: TAdapterStatus;

NCB: TNCB;

begin

FillChar(NCB, SizeOf(NCB), 0);

NCB.ncb_command := Char(NCBRESET);

NCB.ncb_lana_num := Lana;

if Netbios(@NCB) <> Char(NRC_GOODRET) then

begin

Result := 'mac not found';

Exit;

end;

FillChar(NCB, SizeOf(NCB), 0);

NCB.ncb_command := Char(NCBASTAT);

NCB.ncb_lana_num := Lana;

NCB.ncb_callname := '*';

FillChar(Adapter, SizeOf(Adapter), 0);

NCB.ncb_buffer := @Adapter;

NCB.ncb_length := SizeOf(Adapter);

if Netbios(@NCB) <> Char(NRC_GOODRET) then

begin

Result := 'mac not found';

Exit;

end;

Result :=

IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' +

IntToHex(Byte(Adapter.adapter_address[5]), 2);

end;

function GetMACAddress: string;

var

AdapterList: TLanaEnum;

NCB: TNCB;

begin

FillChar(NCB, SizeOf(NCB), 0);

NCB.ncb_command := Char(NCBENUM);

NCB.ncb_buffer := @AdapterList;

NCB.ncb_length := SizeOf(AdapterList);

Netbios(@NCB);

if Byte(AdapterList.length) > 0 then

Result := GetAdapterInfo(AdapterList.lana[0])

else

Result := 'mac not found';

end;

// usage

procedure TForm1.Button1Click(Sender: TObject);

begin

ShowMessage(GetMACAddress);

end;

Link para o comentário
Compartilhar em outros sites

  • 0

Caros colegas, obrigado pela atenção.

Amigo Belomaster, estou usando o procedimento parecido com o do nosso colega XinXanXun. Segue abaixo:

Uses NB30;

procedure TfrmSenha.GeraNum;

var Numero: string;

Begin

{ quando é no Win 2000, a função retorna string vazia }

Numero := GetMACAdress;

End;

{ Retorna o ID Físico da Placa de Rede }

function GetMACAdress: string;

var

NCB: PNCB;

Adapter: PAdapterStatus;

URetCode: PChar;

RetCode: char;

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;

RetCode := Netbios(Ncb);

Fillchar(NCB^, SizeOf(TNCB), 0);

Ncb.ncb_command := chr(NCBASTAT);

Ncb.ncb_lana_num := lenum.lana;

// Must be 16

Ncb.ncb_callname := '* ';

Ncb.ncb_buffer := Pointer(Adapter);

Ncb.ncb_length := SizeOf(TAdapterStatus);

RetCode := Netbios(Ncb);

//---- calc _systemId from mac-address[2-5] XOR mac-address[1]...

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;

Link para o comentário
Compartilhar em outros sites

  • 0

Bolomaster, não deve ser este o problema pois o nome não importa, desde que a chamada esteja se referindo a função que voçê deseja.

No meu caso eu chamei a minha função de: GetMACAdress, se eu mudar para GetMACAddress vou está chamando a mesma função

Agradeço pela boa intenção e continuo necessitando da sua ajuda e dos demais colegas.

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Bom, eu utilizo o windows 2000 professional c/ sp4 e a função que postei anteriormente funciona corretamente.

XinXanXun, não ta na hora de se cadastrar amigo? wink.gif

Experimenta! Experimenta! Experimenta! Experimenta!

laugh.gif

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...