Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 1841 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Solution
Postado

Olá, uso uma função para retornar o serial do HD dos clientes, para controlar quem pode acessar o sistema. Funciona bem, porém em alguns poucos computadores essa função retorna sempre valores diferentes, sendo que deveria retornar sempre o mesmo valor. Alguém sabe porque o serial fica mudando?

A função é essa:

Function SerialNum(FDrive:String) :String;
Var
  WSerial : DWord;
  DirLen, Flags : DWord;
  DLabel : Array[0..11] of Char;
begin
  Try
    GetVolumeInformation(PChar(FDrive+':\'),dLabel,12,@WSerial,DirLen,Flags,nil,0);
    Result := IntToHex(WSerial,8);
  Except
    Result :='';
  end;
end;

Em 99% dos computadores funciona normal, traz sempre o mesmo serial para cada computador, mas em alguns sempre que uso a função o serial vem diferente.

Já peguei alguns casos que mudava porque a bateria da placa mãe estava fraca, ai trocava a bateria e voltava ao normal, mas tem um caso agora que todos os computadores de um cliente novo estão assim, são 7 computadores. Não sei se é algum programa que está fazendo alterar, verifiquei e não encontrei nenhum programa diferente rodando nas máquinas.

Postado

Boa tarde,

tenta essa função

function SerialNum(): string;
var
  DriveLetter : string;
  NotUsed:     DWORD;
  VolumeFlags: DWORD;
  VolumeInfo:  array[0..MAX_PATH] of AnsiChar;
  VolumeSerialNumber: DWORD;
begin
  try
    DriveLetter := GetEnvironmentVariable('SystemDrive');
    GetVolumeInformation(PChar(DriveLetter + '\'),
      nil, SizeOf(VolumeInfo), @VolumeSerialNumber, NotUsed,
      VolumeFlags, nil, 0);
    Result := IntToHex(VolumeSerialNumber, 8);
  except
    Result := '????????';
  end;
end;

 

  • Curtir 1
  • Obrigado 1
Postado
1 hora atrás, Dfox disse:

Boa tarde,

tenta essa função


function SerialNum(): string;
var
  DriveLetter : string;
  NotUsed:     DWORD;
  VolumeFlags: DWORD;
  VolumeInfo:  array[0..MAX_PATH] of AnsiChar;
  VolumeSerialNumber: DWORD;
begin
  try
    DriveLetter := GetEnvironmentVariable('SystemDrive');
    GetVolumeInformation(PChar(DriveLetter + '\'),
      nil, SizeOf(VolumeInfo), @VolumeSerialNumber, NotUsed,
      VolumeFlags, nil, 0);
    Result := IntToHex(VolumeSerialNumber, 8);
  except
    Result := '????????';
  end;
end;

 

Cara, deu certo. MUITO OBRIGADO!!!!!

 

  • Obrigado 1
  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultora ACBr Pro

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
Postado

Nota para posterior informação:
A api citada GetVolumeInformation retorna o serial do volume, que é atribuído pelo SO após a formatação.

A MS recomenda usar (WMI) Win32_PhysicalMedia e pegar a propriedade SerialNumber para pegar o serial atribuído pelo fabricante ao drive.

Veja documentação:https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getvolumeinformationa

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 1841 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...