Identificando Placa De Vídeo (Consegui!)

05/11/2005

Olá pessoal ! ;)

Passei a manhã de hoje estudando como capturar o fabricante/modelo da placa de vídeo. Após cerca de 2 horas de pesquisa, incluindo monitoramento de registro na execução de softwares do gênero, cheguei à uma conclusão unânime. :rolleyes:

Tudo é feito lendo o Registro. Aliás, muitas das informações do PC é ele que nos informa. :wink:

Seguinte ...

Primeiramente, é feita uma leitura na chave [u:667ce985b5]HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO[/u:667ce985b5]. Ela que nos vai informar o caminho para as informações da placa de vídeo. Acessndo esta chave, devemos ler o valor do dado [u:667ce985b5]\Device\Video0[/u:667ce985b5], que representa o dispositivo em uso (pois poderá haver mais). Feito isso, com o valor obtido (algo como [u:667ce985b5]\Registry\Machine\System\CurrentControlSet\Control\Video\{EE650684-306A-4E0E-AD53-4438CE239E17}\0000[/u:667ce985b5]), devemos acessar então a chave (exemplo) [u:667ce985b5]HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Video\{EE650684-306A-4E0E-AD53-4438CE239E17}\0000[/u:667ce985b5], e ler o valor de seu dado [u:667ce985b5]Device Description[/u:667ce985b5]. Pronto ! Feito isso já teremos o que queríamos em mãos ... :)

Seguindo meu conceito acima, fiz esta pequena função:

uses Registry;

function GetDisplayAdapter: String;
var
  Registry: TRegistry;
  Resource: String;
begin
  Registry := TRegistry.Create;
  Registry.RootKey := HKEY_LOCAL_MACHINE;
  Registry.OpenKey(´HARDWARE\DEVICEMAP\VIDEO´, false);
  Resource := Registry.ReadString(´\Device\Video0´);
  Registry.CloseKey;
  Delete(Resource, 1, 18); // Delete ´\Registry\Machine\´
  Registry.OpenKey(Resource, false);
  Result := Registry.ReadString(´Device Description´);
  Registry.CloseKey;
  Registry.Free;
end;

Testei aqui em meu PC e deu certo. Me informou a informação correta, para meu caso: [b:667ce985b5]NVIDIA GeForce4 MX 4000 (Microsoft Corporation)[/b:667ce985b5] (minha placa de vídeo). 8)

Finalmente acabei. Só gostaria de pedir à vocês que testassem este meu pequeno código, para ver se realmente funciona como deveria. E aos que testarem, seria interessante postarem o valor obtido (sem tirar nada), para mim ver se será preciso ´recortar´ alguns espaços que sobrarem em alguns casos, se houverem. :P

[]’s :D


V1d4l0k4

Respostas

08/11/2005

Emerson

na minha máquina funcionou.

:D


Responder Citar

08/11/2005

Delphi32

na minha também funcionou!

t+!


Responder Citar