Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 1278 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
  • Administradores
Postado

Obrigado por reportar.

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

Consultora SAC ACBr

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á 1278 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.